public static Create getCreateCommand(GroupSymbol group, boolean matview, QueryMetadataInterface metadata) throws QueryMetadataException, TeiidComponentException { Create create = new Create(); create.setTable(group); List<ElementSymbol> allColumns = ResolverUtil.resolveElementsInGroup(group, metadata); create.setElementSymbolsAsColumns(allColumns); if (!matview) { for (int i = 0; i < allColumns.size(); i++) { ElementSymbol es = allColumns.get(i); if (!metadata.elementSupports(es.getMetadataID(), SupportConstants.Element.NULL)) { create.getColumns().get(i).setNullType(NullType.No_Nulls); if (es.getType() == DataTypeManager.DefaultDataClasses.INTEGER && metadata.elementSupports(es.getMetadataID(), SupportConstants.Element.AUTO_INCREMENT)) { create.getColumns().get(i).setAutoIncremented(true); //serial } } } } Object pk = metadata.getPrimaryKey(group.getMetadataID()); if (pk != null) { List<ElementSymbol> pkColumns = resolveIndex(metadata, allColumns, pk); create.getPrimaryKey().addAll(pkColumns); } return create; }
@Override public void alterCreate(Create create) { if (!all) { create.getPrimaryKey().addAll(create.getColumnSymbols()); } }
@Override public void visit(Create obj) { if (!obj.getPrimaryKey().isEmpty()) { validateSortable(obj.getPrimaryKey()); } if (obj.getTableMetadata() != null) { Table t = obj.getTableMetadata(); if (!t.getForeignKeys().isEmpty()) { handleValidationError(QueryPlugin.Util.getString("ValidationVisitor.temp_fk", obj.getTable()), obj); //$NON-NLS-1$ } } }
void addForeignTempTable(final String tempTableName, Create create) { TempMetadataID id = tempMetadataStore.getTempGroupID(tempTableName); if (id == null) { id = tempMetadataStore.addTempGroup(tempTableName, create.getColumnSymbols(), false, true); id.setOriginalMetadataID(create.getTableMetadata()); id.getTableData().setModel(create.getTableMetadata().getParent()); } this.foreignTempTables.put(tempTableName, create.getTableMetadata()); }
final public Command createTempTable(ParseInfo info) throws ParseException { Create create = new Create(); String table = null; String pkId = null; table = id(null); jj_consume_token(LPAREN); create.setTable(new GroupSymbol(table)); col = tableElement(info); create.getColumns().add(col); label_2: while (true) { create.getColumns().add(col); jj_consume_token(KEY); pk = columnList(true, true); create.getPrimaryKey().addAll(pk); break; default: jj_consume_token(COMMIT); jj_consume_token(PRESERVE); create.setCommitAction(Create.CommitAction.PRESERVE_ROWS); jj_consume_token(ROWS); break;
append(CREATE); append(SPACE); if (obj.getTableMetadata() != null) { append(FOREIGN); append(SPACE); new DDLVisitor().addTableBody(obj.getTableMetadata()); outputLiteral(String.class, false, obj.getOn()); return; append(TABLE); append(SPACE); visitNode(obj.getTable()); append(SPACE); List<Column> columns = obj.getColumns(); append("("); //$NON-NLS-1$ Iterator<Column> iter = columns.iterator(); if (!obj.getPrimaryKey().isEmpty()) { append(", "); //$NON-NLS-1$ append(PRIMARY); append(NonReserved.KEY); append(Tokens.LPAREN); Iterator<ElementSymbol> pkiter = obj.getPrimaryKey().iterator(); while (pkiter.hasNext()) { outputShortName(pkiter.next());
public static final Create sample1() { Create create = new Create(); create.setTable(new GroupSymbol("temp_table"));//$NON-NLS-1$ List elements = new ArrayList(); elements.add(new ElementSymbol("a")); //$NON-NLS-1$ elements.add(new ElementSymbol("b")); //$NON-NLS-1$ create.setElementSymbolsAsColumns(elements); return create; }
/** * @see org.teiid.query.sql.lang.Command#clone() * @since 5.5 */ public Object clone() { Create copy = new Create(); GroupSymbol copyTable = table.clone(); copy.setTable(copyTable); copy.columns = new ArrayList<Column>(columns.size()); for (Column column : columns) { Column copyColumn = new Column(); copyColumn.setName(column.getName()); copyColumn.setRuntimeType(column.getRuntimeType()); copyColumn.setAutoIncremented(column.isAutoIncremented()); copyColumn.setNullType(column.getNullType()); copy.columns.add(copyColumn); } copy.primaryKey = LanguageObject.Util.deepClone(primaryKey, ElementSymbol.class); copyMetadataState(copy); copy.setTableMetadata(this.tableMetadata); copy.on = this.on; copy.commitAction = this.commitAction; return copy; }
@Test public void testCreateTempTable1() { Create create = new Create(); create.setTable(new GroupSymbol("tempTable")); //$NON-NLS-1$ List<ElementSymbol> columns = new ArrayList<ElementSymbol>(); ElementSymbol column = new ElementSymbol("c1");//$NON-NLS-1$ column.setType(DataTypeManager.DefaultDataClasses.BOOLEAN); columns.add(column); column = new ElementSymbol("c2");//$NON-NLS-1$ column.setType(DataTypeManager.DefaultDataClasses.BYTE); columns.add(column); create.setElementSymbolsAsColumns(columns); create.setCommitAction(CommitAction.PRESERVE_ROWS); helpTest("Create local TEMPORARY table tempTable (c1 boolean, c2 byte) on commit preserve rows", "CREATE LOCAL TEMPORARY TABLE tempTable (c1 boolean, c2 byte) ON COMMIT PRESERVE ROWS", create); //$NON-NLS-1$ //$NON-NLS-2$ }
jj_consume_token(ON); model = id(null); Create create = new Create(); create.setTableMetadata(table); create.setOn(model); {if (true) return create;} throw new Error("Missing return statement in function");
if (!procEnv.getTempTableStore().hasTempTable(groupName, true)) { Create create = new Create(); create.setTable(new GroupSymbol(groupName)); for (ElementSymbol es : (List<ElementSymbol>)dynamicCommand.getAsColumns()) { Column c = new Column(); c.setName(es.getShortName()); c.setRuntimeType(DataTypeManager.getDataTypeName(es.getType())); create.getColumns().add(c);
@Test public void testForeignTemp() { Create create = new Create(); create.setTable(new GroupSymbol("tempTable")); //$NON-NLS-1$ create.setOn("source"); Table t = new Table(); t.setName("tempTable"); t.setUUID("tid:0"); Column c = new Column(); c.setName("x"); c.setUUID("tid:0"); Datatype string = SystemMetadata.getInstance().getRuntimeTypeMap().get("string"); c.setDatatype(string, true, 0); t.addColumn(c); c = new Column(); c.setName("y"); c.setUUID("tid:0"); Datatype decimal = SystemMetadata.getInstance().getRuntimeTypeMap().get("decimal"); c.setDatatype(decimal, true, 0); t.addColumn(c); t.setCardinality(10000); create.setTableMetadata(t); helpTest("create foreign temporary table tempTable (x string, y decimal) options (cardinality 10000) on source", "CREATE FOREIGN TEMPORARY TABLE tempTable (\n x string,\n y bigdecimal\n) OPTIONS (CARDINALITY 10000) ON 'source'", create); //$NON-NLS-1$ //$NON-NLS-2$ }
GroupSymbol group = create.getTable(); TempMetadataID tempTable = ResolverUtil.addTempTable(metadata, group, create.getColumnSymbols()); ResolverUtil.resolveGroup(create.getTable(), metadata); Set<GroupSymbol> groups = new HashSet<GroupSymbol>(); groups.add(create.getTable()); ResolverVisitor.resolveLanguageObject(command, groups, metadata); addAdditionalMetadata(create, tempTable); tempTable.setOriginalMetadataID(create.getTableMetadata()); if (create.getOn() != null) { Object mid = null; try { mid = metadata.getModelID(create.getOn()); } catch (QueryMetadataException e) { throw new QueryResolverException(QueryPlugin.Event.TEIID31134, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31134, create.getOn())); throw new QueryResolverException(QueryPlugin.Event.TEIID31135, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID31135, create.getOn())); create.getTableMetadata().setParent((Schema)mid); tempTable.getTableData().setModel(mid);
public void visit(Create obj) { preVisitVisitor(obj); visitNode(obj.getTable()); visitNodes(obj.getColumnSymbols()); visitNodes(obj.getPrimaryKey()); postVisitVisitor(obj); } public void visit(Drop obj) {
&& EquivalenceUtil.areEqual(getTable(), other.getTable()) && EquivalenceUtil.areEqual(getPrimaryKey(), other.getPrimaryKey()) && EquivalenceUtil.areEqual(this.on, other.on) && ((tableMetadata == null && other.tableMetadata == null) || (tableMetadata != null && other.tableMetadata != null && this.toString().equals(other.toString())));
public static void addAdditionalMetadata(Create create, TempMetadataID tempTable) { if (!create.getPrimaryKey().isEmpty()) { ArrayList<TempMetadataID> primaryKey = new ArrayList<TempMetadataID>(create.getPrimaryKey().size()); for (ElementSymbol symbol : create.getPrimaryKey()) { Object mid = symbol.getMetadataID(); if (mid instanceof TempMetadataID) { primaryKey.add((TempMetadataID)mid); } else if (mid instanceof Column) { //TODO: this breaks our normal metadata usage primaryKey.add(tempTable.getElements().get(((Column)mid).getPosition() - 1)); } } tempTable.setPrimaryKey(primaryKey); } for (int i = 0; i < create.getColumns().size(); i++) { Column column = create.getColumns().get(i); TempMetadataID tid = tempTable.getElements().get(i); if (column.isAutoIncremented()) { tid.setAutoIncrement(true); } if (column.getNullType() == NullType.No_Nulls) { tid.setNotNull(true); } } }
@Override public TempTable createMatTable(final String tableName, GroupSymbol group) throws TeiidComponentException, QueryMetadataException, TeiidProcessingException { Create create = getCreateCommand(group, true, metadata); TempTable table = tableStore.addTempTable(tableName, create, bufferManager, false, null); table.setUpdatable(false); CacheHint hint = table.getCacheHint(); if (hint != null) { table.setPreferMemory(hint.isPrefersMemory()); if (hint.getTtl() != null) { getMatTableInfo(tableName).setTtl(hint.getTtl()); } if (!create.getPrimaryKey().isEmpty()) { table.setUpdatable(hint.isUpdatable(false)); } } return table; }
final public Command createTempTable(ParseInfo info) throws ParseException { Create create = new Create(); String table = null; String pkId = null; table = id(null); jj_consume_token(LPAREN); create.setTable(new GroupSymbol(table)); col = tableElement(info); create.getColumns().add(col); label_2: while (true) { create.getColumns().add(col); jj_consume_token(KEY); pk = columnList(true, true); create.getPrimaryKey().addAll(pk); break; default: jj_consume_token(COMMIT); jj_consume_token(PRESERVE); create.setCommitAction(Create.CommitAction.PRESERVE_ROWS); jj_consume_token(ROWS); break;
append(CREATE); append(SPACE); if (obj.getTableMetadata() != null) { append(FOREIGN); append(SPACE); new DDLVisitor().addTableBody(obj.getTableMetadata()); outputLiteral(String.class, false, obj.getOn()); return; append(TABLE); append(SPACE); visitNode(obj.getTable()); append(SPACE); List<Column> columns = obj.getColumns(); append("("); //$NON-NLS-1$ Iterator<Column> iter = columns.iterator(); if (!obj.getPrimaryKey().isEmpty()) { append(", "); //$NON-NLS-1$ append(PRIMARY); append(NonReserved.KEY); append(Tokens.LPAREN); Iterator<ElementSymbol> pkiter = obj.getPrimaryKey().iterator(); while (pkiter.hasNext()) { outputShortName(pkiter.next());
public static final Create sample2() { Create create = new Create(); create.setTable(new GroupSymbol("temp_table2"));//$NON-NLS-1$ List elements = new ArrayList(); elements.add(new ElementSymbol("a")); //$NON-NLS-1$ elements.add(new ElementSymbol("b")); //$NON-NLS-1$ create.setElementSymbolsAsColumns(elements); return create; }