private static CreateTableColumn GetColumn( EsperEPL2GrammarParser.CreateTableColumnContext ctx, IDictionary<ITree, ExprNode> astExprNodeMap, StatementSpecMapEnv mapEnv) { var columnName = ctx.n.Text; ExprNode optExpression = null; if (ctx.builtinFunc() != null || ctx.chainable() != null) { optExpression = ASTExprHelper.ExprCollectSubNodes(ctx, 0, astExprNodeMap)[0]; } var optType = ASTClassIdentifierHelper.Walk(ctx.classIdentifierWithDimensions()); var primaryKey = false; if (ctx.p != null) { if (!string.Equals(ctx.p.Text, "primary", StringComparison.InvariantCultureIgnoreCase)) { throw ASTWalkException.From("Invalid keyword '" + ctx.p.Text + "' encountered, expected 'primary key'"); } if (!string.Equals(ctx.k.Text, "key", StringComparison.InvariantCultureIgnoreCase)) { throw ASTWalkException.From("Invalid keyword '" + ctx.k.Text + "' encountered, expected 'primary key'"); } primaryKey = true; } IList<AnnotationDesc> annots = new EmptyList<AnnotationDesc>(); if (ctx.annotationEnum() != null) { annots = new List<AnnotationDesc>(ctx.annotationEnum().Length); foreach (EsperEPL2GrammarParser.AnnotationEnumContext anctx in ctx.annotationEnum()) { annots.Add(ASTAnnotationHelper.Walk(anctx, mapEnv.ImportService)); } } if (ctx.typeExpressionAnnotation() != null) { if (annots.IsEmpty()) { annots = new List<AnnotationDesc>(); } foreach (EsperEPL2GrammarParser.TypeExpressionAnnotationContext anno in ctx.typeExpressionAnnotation()) { annots.Add(new AnnotationDesc(anno.n.Text, anno.v.Text)); } } return new CreateTableColumn(columnName, optExpression, optType, annots, primaryKey); }
public static IList<ColumnDesc> GetColTypeList(EsperEPL2GrammarParser.CreateColumnListContext ctx) { if (ctx == null) { return new EmptyList<ColumnDesc>(); } IList<ColumnDesc> result = new List<ColumnDesc>(ctx.createColumnListElement().Length); foreach (var colctx in ctx.createColumnListElement()) { var colname = colctx.classIdentifier(); var name = ASTUtil.UnescapeClassIdent(colname); var classIdent = ASTClassIdentifierHelper.Walk(colctx.classIdentifierWithDimensions()); result.Add(new ColumnDesc(name, classIdent?.ToEPL())); } return result; }