x.getName().accept(this); SQLDataType dataType = x.getDataType(); if (dataType != null) { print(' '); SQLExpr generatedAlawsAs = x.getGeneratedAlawsAs(); if (generatedAlawsAs != null) { print0(ucase ? " GENERATED ALWAYS AS (" : " generated always as ("); final SQLExpr charsetExpr = x.getCharsetExpr(); if (charsetExpr != null) { print0(ucase ? " CHARSET " : " charset "); for (SQLColumnConstraint item : x.getConstraints()) { print(' '); item.accept(this); final SQLExpr defaultExpr = x.getDefaultExpr(); if (defaultExpr != null) { print0(ucase ? " DEFAULT " : " default "); final SQLExpr storage = x.getStorage(); if (storage != null) { print0(ucase ? " STORAGE " : " storage "); SQLExpr onUpdate = x.getOnUpdate(); if (onUpdate != null) { print0(ucase ? " ON UPDATE " : " on update ");
public SQLColumnDefinition clone() { SQLColumnDefinition x = new SQLColumnDefinition(); x.setDbType(dbType); x.setName(name.clone()); x.setDataType(dataType.clone()); x.setDefaultExpr(defaultExpr.clone()); x.setComment(comment.clone()); x.setOnUpdate(onUpdate.clone()); x.setStorage(storage.clone()); x.setCharsetExpr(charsetExpr.clone()); x.setAsExpr(asExpr.clone()); x.setIdentity(identity.clone());
public SQLColumnDefinition createColumnDefinition() { SQLColumnDefinition column = new SQLColumnDefinition(); column.setDbType(dbType); return column; }
protected void visitColumnDefault(SQLColumnDefinition x) { if (x.getParent() instanceof SQLBlockStatement) { print0(" := "); } else { print0(ucase ? " DEFAULT " : " default "); } x.getDefaultExpr().accept(this); }
@Override public boolean visit(SQLColumnDefinition x) { boolean parameterized = this.parameterized; this.parameterized = false; x.getName().accept(this); if (x.getDataType() != null) { print(' '); x.getDataType().accept(this); } if (x.getDefaultExpr() != null) { visitColumnDefault(x); } for (SQLColumnConstraint item : x.getConstraints()) { print(' '); item.accept(this); } if (x.getIdentity() != null) { print(' '); x.getIdentity().accept(this); } if (x.getEnable() != null) { if (x.getEnable().booleanValue()) { print0(ucase ? " ENABLE" : " enable"); } } this.parameterized = parameterized; return false; }
x.getName().accept(this); if (x.getDataType() != null) { print(' '); x.getDataType().accept(this); if (x.getDefaultExpr() != null) { visitColumnDefault(x); if (x.isAutoIncrement()) { print0(ucase ? " AUTO_INCREMENT" : " auto_increment"); for (SQLColumnConstraint item : x.getConstraints()) { boolean newLine = item instanceof SQLForeignKeyConstraint // || item instanceof SQLPrimaryKey // SQLExpr generatedAlawsAs = x.getGeneratedAlawsAs(); if (generatedAlawsAs != null) { print0(ucase ? " GENERATED ALWAYS AS " : " generated always as "); SQLColumnDefinition.Identity identity = x.getIdentity(); if (identity != null) { print(' '); if (x.getEnable() != null) { if (x.getEnable().booleanValue()) { print0(ucase ? " ENABLE" : " enable"); if (x.getComment() != null) {
public SQLColumnDefinition findColumn(long columName_hash) { for (SQLTableElement element : tableElementList) { if (element instanceof SQLColumnDefinition) { SQLColumnDefinition column = (SQLColumnDefinition) element; SQLName columnName = column.getName(); if (columnName != null && columnName.nameHashCode64() == columName_hash) { return column; } } } return null; }
String name = SQLUtils.normalize(column.getName().getSimpleName()); if (name_len < name.length()) { name_len = name.length(); String dataType = column.getDataType().getName(); if (column.getDataType().getArguments().size() > 0) { dataType += "("; for (int i = 0; i < column.getDataType().getArguments().size(); i++) { if (i != 0) { dataType += ","; SQLExpr arg = column.getDataType().getArguments().get(i); dataType += arg.toString(); if (column.getDefaultExpr() == null) { defaultValues.add(null); } else { String defaultVal = SQLUtils.toMySqlString(column.getDefaultExpr()); if (defaultVal.length() > 2 && defaultVal.charAt(0) == '\'' && defaultVal.charAt(defaultVal.length() - 1) == '\'') { defaultVal = defaultVal.substring(1, defaultVal.length() - 1); if (column.isAutoIncrement()) { extra_len = "auto_increment".length(); } else if (column.getOnUpdate() != null) { extra_len = "on update CURRENT_TIMESTAMP".length(); String name = SQLUtils.normalize(column.getName().getSimpleName()); if (column.containsNotNullConstaint()) {
createView.addColumn(constraint); } else { SQLColumnDefinition column = new SQLColumnDefinition(); column.setDbType(dbType); SQLName expr = this.exprParser.name(); column.setName(expr); comment = this.exprParser.primary(); column.setComment(comment); column.setParent(createView); createView.addColumn(column);
public static StructureMeta.ColumnMeta.Builder makeColumnMeta(StructureMeta.TableMeta.Builder tmBuilder, SQLColumnDefinition column, Set<String> indexNames) { StructureMeta.ColumnMeta.Builder cmBuilder = StructureMeta.ColumnMeta.newBuilder().setCanNull(true); cmBuilder.setName(StringUtil.removeBackQuote(column.getName().getSimpleName())); cmBuilder.setDataType(column.getDataType().getName()); for (SQLColumnConstraint constraint : column.getConstraints()) { if (constraint instanceof SQLNotNullConstraint) { cmBuilder.setCanNull(false); } else if (constraint instanceof SQLNullConstraint) { cmBuilder.setCanNull(true); } else if (constraint instanceof SQLColumnPrimaryKey) { tmBuilder.setPrimary(makeIndexMeta(PRIMARY, IndexType.PRI, new ArrayList<>(Collections.singletonList(new SQLSelectOrderByItem(column.getName()))))); } else if (constraint instanceof SQLColumnUniqueKey) { List<SQLSelectOrderByItem> columnExprs = new ArrayList<>(Collections.singletonList(new SQLSelectOrderByItem(column.getName()))); String indexName = genIndexName(null, columnExprs, indexNames); tmBuilder.addUniIndex(makeIndexMeta(indexName, IndexType.UNI, columnExprs)); } } if (column.getDefaultExpr() != null) { StringBuilder builder = new StringBuilder(); MySqlOutputVisitor visitor = new MySqlOutputVisitor(builder); visitor.setShardingSupport(false); column.getDefaultExpr().accept(visitor); cmBuilder.setSdefault(builder.toString()); } if (column.isAutoIncrement()) { cmBuilder.setAutoIncre(true); } return cmBuilder; } }
public boolean visit(SQLColumnDefinition x) { String tableName = null; { SQLObject parent = x.getParent(); if (parent instanceof SQLCreateTableStatement) { tableName = ((SQLCreateTableStatement) parent).getName().toString(); } } if (tableName == null) { return true; } String columnName = x.getName().toString(); Column column = addColumn(tableName, columnName); if (x.getDataType() != null) { column.setDataType(x.getDataType().getName()); } for (SQLColumnConstraint item : x.getConstraints()) { if (item instanceof SQLPrimaryKey) { column.setPrimaryKey(true); } else if (item instanceof SQLUnique) { column.setUnique(true); } } return false; }
accept(Token.UPDATE); SQLExpr expr = this.expr(); column.setOnUpdate(expr); column.setCharsetExpr(charSetCollateExpr); return parseColumnRest(column); column.setCharsetExpr(charSetCollateExpr); return parseColumnRest(column); column.setAutoIncrement(true); return parseColumnRest(column); && column.getDataType().nameHashCode64() ==FnvHash.Constants.DOUBLE) { lexer.nextToken(); lexer.nextToken(); SQLExpr expr = expr(); column.setStorage(expr); accept(Token.LPAREN); SQLExpr expr = expr(); column.setAsExpr(expr); accept(Token.RPAREN); column.setSorted(true); column.setVirtual(true);
public SQLColumnDefinition parseColumn() { SQLColumnDefinition column = new SQLColumnDefinition(); column.setDbType(dbType); column.setName(name()); column.setDataType(parseDataType()); if (lexer.identifierEquals(FnvHash.Constants.GENERATED)) { lexer.nextToken(); acceptIdentifier("ALWAYS"); accept(Token.AS); accept(Token.LPAREN); SQLExpr expr = this.expr(); accept(Token.RPAREN); column.setGeneratedAlawsAs(expr); } return parseColumnRest(column); }
public static SQLColumnDefinition createCheckColumn() { SQLColumnDefinition column = new SQLColumnDefinition(); column.setDataType(new SQLCharacterDataType("bigint")); column.setDefaultExpr(new SQLNullExpr()); column.setName(new SQLIdentifierExpr(GLOBAL_TABLE_CHECK_COLUMN)); column.setComment(new SQLCharExpr("field for checking consistency")); return column; }
public SQLDataType computeDataType() { if (resolvedColumn != null) { return resolvedColumn.getDataType(); } if (resolvedOwnerObject != null && resolvedOwnerObject instanceof SQLSubqueryTableSource) { SQLSelect select = ((SQLSubqueryTableSource) resolvedOwnerObject).getSelect(); SQLSelectQueryBlock queryBlock = select.getFirstQueryBlock(); if (queryBlock == null) { return null; } SQLSelectItem selectItem = queryBlock.findSelectItem(nameHashCode64()); if (selectItem != null) { return selectItem.computeDataType(); } } return null; }
private List<SqlCheckColumnInfo> buildColumnAddInfo() { if (sqlStatement instanceof SQLAlterTableStatement) { SQLAlterTableStatement alterStmt = (SQLAlterTableStatement) sqlStatement; List<SqlCheckColumnInfo> columnsAddList = new ArrayList<>(); for (SQLAlterTableItem item : alterStmt.getItems()) { if (item instanceof SQLAlterTableAddColumn) { SQLAlterTableAddColumn columnAdd = (SQLAlterTableAddColumn) item; List<SQLColumnDefinition> columnDefinitions = columnAdd.getColumns(); List<SqlCheckColumnInfo> columnInfos = new ArrayList<>(); for (SQLColumnDefinition columnDefinition : columnDefinitions) { SqlCheckColumnInfo columnInfo = new SqlCheckColumnInfo(); columnInfo.setName(columnDefinition.getName().getSimpleName()); columnInfo.setDataType(columnDefinition.getDataType().getName()); columnInfos.add(columnInfo); } columnsAddList.addAll(columnInfos); } } return columnsAddList; } return Lists.newArrayList(); }
public boolean apply(MySqlAlterTableModifyColumn item) { SQLColumnDefinition column = item.getNewColumnDefinition().clone(); SQLName columnName = column.getName(); int columnIndex = columnIndexOf(columnName); if (columnIndex == -1) { return false; } int afterIndex = columnIndexOf(item.getAfterColumn()); int beforeIndex = columnIndexOf(item.getFirstColumn()); int insertIndex = -1; if (beforeIndex != -1) { insertIndex = beforeIndex; } else if (afterIndex != -1) { insertIndex = afterIndex + 1; } column.setParent(this); if (insertIndex == -1 || insertIndex == columnIndex) { tableElementList.set(columnIndex, column); return true; } else { if (insertIndex > columnIndex) { tableElementList.add(insertIndex, column); tableElementList.remove(columnIndex); } else { tableElementList.remove(columnIndex); tableElementList.add(insertIndex, column); } } return true; }
alterColumn.setColumn(column); if (column.getDataType() == null && column.getConstraints().size() == 0) { if (lexer.token() == Token.SET) { lexer.nextToken();
private static Field convertColumnDefForAlterTable(SQLColumnDefinition column) throws UnsupportedException { Field field = new Field(); if (column instanceof WaspSqlColumnDefinition) { WaspSqlColumnDefinition waspColumn = (WaspSqlColumnDefinition) column; if (waspColumn.getComment() != null) { field.setComment(waspColumn.getComment()); } if (waspColumn.getColumnFamily() != null) { field.setFamily(parseName(waspColumn.getColumnFamily())); } else { field.setFamily(FConstants.COLUMNFAMILYNAME_STR); } field.setKeyWord(FieldKeyWord.OPTIONAL); field.setName(parseName(column.getName())); field.setType(parse(column.getDataType())); } else { field.setComment(column.getComment()); field.setFamily(FConstants.COLUMNFAMILYNAME_STR); field.setKeyWord(FieldKeyWord.OPTIONAL); field.setName(parseName(column.getName())); field.setType(parse(column.getDataType())); } return field; }
public SQLColumnDefinition parseColumnRest(SQLColumnDefinition column) { if (lexer.token == Token.DEFAULT) { lexer.nextToken(); column.setDefaultExpr(bitOr()); return parseColumnRest(column); column.addConstraint(notNull); return parseColumnRest(column); column.getConstraints().add(new SQLNullConstraint()); return parseColumnRest(column); lexer.nextToken(); accept(Token.KEY); column.addConstraint(new SQLColumnPrimaryKey()); return parseColumnRest(column); column.addConstraint(new SQLColumnUniqueKey()); return parseColumnRest(column); column.addConstraint(new SQLColumnUniqueKey()); return parseColumnRest(column); column.addConstraint(ref); return parseColumnRest(column); SQLColumnPrimaryKey pk = new SQLColumnPrimaryKey(); pk.setName(name); column.addConstraint(pk); return parseColumnRest(column);