/** Get the Table symbol linked from a RECORD_NAME AST. */ private ITable astTableLink(JPNode tableAST) { LOG.trace("Entering astTableLink {}", tableAST); TableBuffer buffer = (TableBuffer) tableAST.getLink(IConstants.SYMBOL); assert buffer != null; return buffer.getTable(); }
/** Get the Table symbol linked from a RECORD_NAME AST. */ private ITable astTableLink(JPNode tableAST) { LOG.trace("Entering astTableLink {}", tableAST); TableBuffer buffer = (TableBuffer) tableAST.getLink(IConstants.SYMBOL); assert buffer != null; return buffer.getTable(); }
@Override public void defineIndexInitialize(JPNode idNode, JPNode unique, JPNode primary, JPNode word) throws SemanticException { LOG.trace("Entering defineIndexInitialize {} - {} - {} - {}", idNode, unique, primary, word); currDefIndex = new Index(currDefTable.getTable(), idNode.getText(), (unique != null), (primary != null)); currDefTable.getTable().add(currDefIndex); }
@Override public void defineIndexInitialize(JPNode idNode, JPNode unique, JPNode primary, JPNode word) throws SemanticException { LOG.trace("Entering defineIndexInitialize {} - {} - {} - {}", idNode, unique, primary, word); currDefIndex = new Index(currDefTable.getTable(), idNode.getText(), (unique != null), (primary != null)); currDefTable.getTable().add(currDefIndex); }
@Override public void defineTableFieldFinalize(Object obj) { LOG.trace("Entering defineTableFieldFinalize {}", obj); ((FieldBuffer) obj).getField().setTable(currDefTable.getTable()); }
@Override public void defineTableFieldFinalize(Object obj) { LOG.trace("Entering defineTableFieldFinalize {}", obj); ((FieldBuffer) obj).getField().setTable(currDefTable.getTable()); }
/** Define a temp or work table field */ public FieldBuffer defineTableField(String name, TableBuffer buffer) { ITable table = buffer.getTable(); IField field = new Field(name, table); return new FieldBuffer(this, buffer, field); }
/** Define a temp or work table field */ public FieldBuffer defineTableField(String name, TableBuffer buffer) { ITable table = buffer.getTable(); IField field = new Field(name, table); return new FieldBuffer(this, buffer, field); }
@Override public void defineIndexField(JPNode idNode) throws SemanticException { LOG.trace("Entering defineIndexField{}", idNode); IField fld = currDefTable.getTable().lookupField(idNode.getText()); if (fld != null) currDefIndex.addField(fld); }
@Override public void defineIndexField(JPNode idNode) throws SemanticException { LOG.trace("Entering defineIndexField{}", idNode); IField fld = currDefTable.getTable().lookupField(idNode.getText()); if (fld != null) currDefIndex.addField(fld); }
@Override public void defineUseIndex(JPNode recNode, JPNode idNode) throws SemanticException { LOG.trace("Entering defineUseIndex {}", idNode); ITable table = astTableLink(recNode); IIndex idx = table.lookupIndex(idNode.getText()); currDefTable.getTable().add(new Index(currDefTable.getTable(), idx.getName(), idx.isUnique(), idx.isPrimary())); currDefTableUseIndex = true; }
@Override public void defineUseIndex(JPNode recNode, JPNode idNode) throws SemanticException { LOG.trace("Entering defineUseIndex {}", idNode); ITable table = astTableLink(recNode); IIndex idx = table.lookupIndex(idNode.getText()); currDefTable.getTable().add(new Index(currDefTable.getTable(), idx.getName(), idx.isUnique(), idx.isPrimary())); currDefTableUseIndex = true; }
@Override public void postDefineTempTable(JPNode defAST, JPNode idNode) throws SemanticException { LOG.trace("Entering postDefineTempTable {} {}", defAST, idNode); // In case of DEFINE TT LIKE, indexes are copied only if USE-INDEX and INDEX are never used if ((currDefTableLike != null) && !currDefTableUseIndex && currDefTable.getTable().getIndexes().isEmpty()) { LOG.trace("Copying all indexes from {}", currDefTableLike.getName()); for (IIndex idx : currDefTableLike.getIndexes()) { Index newIdx = new Index(currDefTable.getTable(), idx.getName(), idx.isUnique(), idx.isPrimary()); for (IField fld : idx.getFields()) { IField ifld = newIdx.getTable().lookupField(fld.getName()); if (ifld == null) { LOG.info("Unable to find field name {} in table {}", fld.getName(), currDefTable.getTable().getName()); } else { newIdx.addField(ifld); } } currDefTable.getTable().add(newIdx); } } }
@Override public void postDefineTempTable(JPNode defAST, JPNode idNode) throws SemanticException { LOG.trace("Entering postDefineTempTable {} {}", defAST, idNode); // In case of DEFINE TT LIKE, indexes are copied only if USE-INDEX and INDEX are never used if ((currDefTableLike != null) && !currDefTableUseIndex && currDefTable.getTable().getIndexes().isEmpty()) { LOG.trace("Copying all indexes from {}", currDefTableLike.getName()); for (IIndex idx : currDefTableLike.getIndexes()) { Index newIdx = new Index(currDefTable.getTable(), idx.getName(), idx.isUnique(), idx.isPrimary()); for (IField fld : idx.getFields()) { IField ifld = newIdx.getTable().lookupField(fld.getName()); if (ifld == null) { LOG.info("Unable to find field name {} in table {}", fld.getName(), currDefTable.getTable().getName()); } else { newIdx.addField(ifld); } } currDefTable.getTable().add(newIdx); } } }
/** * Add a TableBuffer for names lookup. This is called when copying a SymbolScopeSuper's symbols for inheritance * purposes. */ private void add(TableBuffer tableBuffer) { ITable table = tableBuffer.getTable(); addTableBuffer(tableBuffer.getName(), table, tableBuffer); getRootScope().addTableDefinitionIfNew(table); }
/** * Add a TableBuffer for names lookup. This is called when copying a SymbolScopeSuper's symbols for inheritance * purposes. */ private void add(TableBuffer tableBuffer) { ITable table = tableBuffer.getTable(); addTableBuffer(tableBuffer.getName(), table, tableBuffer); getRootScope().addTableDefinitionIfNew(table); }
/** For a RECORD_NAME node, do checks and assignments for the TableBuffer. */ private void recordNodeSymbol(JPNode node, TableBuffer buffer) throws SemanticException { String nodeText = node.getText(); if (buffer == null) { throw new TreeParserException("Could not resolve table '" + nodeText + "'", node.getFilename(), node.getLine(), node.getColumn()); } ITable table = buffer.getTable(); prevTableReferenced = lastTableReferenced; lastTableReferenced = buffer; // For an unnamed buffer, determine if it's abbreviated. // Note that named buffers, temp and work table names cannot be abbreviated. if (buffer.isDefault() && table.getStoretype() == IConstants.ST_DBTABLE) { String[] nameParts = nodeText.split("\\."); int tableNameLen = nameParts[nameParts.length - 1].length(); if (table.getName().length() > tableNameLen) node.attrSet(IConstants.ABBREVIATED, 1); } }
/** For a RECORD_NAME node, do checks and assignments for the TableBuffer. */ private void recordNodeSymbol(JPNode node, TableBuffer buffer) throws SemanticException { String nodeText = node.getText(); if (buffer == null) { throw new TreeParserException("Could not resolve table '" + nodeText + "'", node.getFilename(), node.getLine(), node.getColumn()); } ITable table = buffer.getTable(); prevTableReferenced = lastTableReferenced; lastTableReferenced = buffer; // For an unnamed buffer, determine if it's abbreviated. // Note that named buffers, temp and work table names cannot be abbreviated. if (buffer.isDefault() && table.getStoretype() == IConstants.ST_DBTABLE) { String[] nameParts = nodeText.split("\\."); int tableNameLen = nameParts[nameParts.length - 1].length(); if (table.getName().length() > tableNameLen) node.attrSet(IConstants.ABBREVIATED, 1); } }
/** * For a Form_item node which is for a whole table reference, get a list of the FieldBuffers that would be added to * the frame, respecting any EXCEPT fields list. */ public List<FieldBuffer> calculateFormItemTableFields(JPNode formItemNode) { assert formItemNode.getType() == ProParserTokenTypes.Form_item; assert formItemNode.getFirstChild().getType() == ProParserTokenTypes.RECORD_NAME; RecordNameNode recordNameNode = (RecordNameNode) formItemNode.getFirstChild(); TableBuffer tableBuffer = recordNameNode.getTableBuffer(); HashSet<IField> fieldSet = new HashSet<>(tableBuffer.getTable().getFieldSet()); JPNode exceptNode = formItemNode.getParent().findDirectChild(ProParserTokenTypes.EXCEPT); if (exceptNode != null) for (JPNode n = exceptNode.getFirstChild(); n != null; n = n.getNextSibling()) { if (!(n instanceof FieldRefNode)) continue; IField f = ((FieldBuffer) ((FieldRefNode) n).getSymbol()).getField(); fieldSet.remove(f); } ArrayList<FieldBuffer> returnList = new ArrayList<>(); for (IField field : fieldSet) { returnList.add(tableBuffer.getFieldBuffer(field)); } return returnList; }
/** * For a Form_item node which is for a whole table reference, get a list of the FieldBuffers that would be added to * the frame, respecting any EXCEPT fields list. */ public List<FieldBuffer> calculateFormItemTableFields(JPNode formItemNode) { assert formItemNode.getType() == ProParserTokenTypes.Form_item; assert formItemNode.getFirstChild().getType() == ProParserTokenTypes.RECORD_NAME; RecordNameNode recordNameNode = (RecordNameNode) formItemNode.getFirstChild(); TableBuffer tableBuffer = recordNameNode.getTableBuffer(); HashSet<IField> fieldSet = new HashSet<>(tableBuffer.getTable().getFieldSet()); JPNode exceptNode = formItemNode.getParent().findDirectChild(ProParserTokenTypes.EXCEPT); if (exceptNode != null) for (JPNode n = exceptNode.getFirstChild(); n != null; n = n.getNextSibling()) { if (!(n instanceof FieldRefNode)) continue; IField f = ((FieldBuffer) ((FieldRefNode) n).getSymbol()).getField(); fieldSet.remove(f); } ArrayList<FieldBuffer> returnList = new ArrayList<>(); for (IField field : fieldSet) { returnList.add(tableBuffer.getFieldBuffer(field)); } return returnList; }