示例#1
0
文件: Name.cs 项目: deveel/deveeldb
        public static ObjectName Object(PlSqlParser.ObjectNameContext context)
        {
            if (context == null)
                return null;

            var parts = context.id().Select(x => x.GetText()).ToArray();
            var realParts = new List<string>();

            foreach (var part in parts) {
                if (!String.IsNullOrEmpty(part)) {
                    var sp = part.Split('.');
                    foreach (var s in sp) {
                        realParts.Add(s);
                    }
                }
            }

            parts = realParts.ToArray();

            ObjectName name = null;

            for (int i = 0; i < parts.Length; i++) {
                var part = InputString.AsNotQuoted(parts[i]);

                if (name == null) {
                    name = new ObjectName(part);
                } else {
                    name = new ObjectName(name, part);
                }
            }

            return name;
        }
示例#2
0
        public static SqlTableConstraint Form(PlSqlParser.TableConstraintContext context)
        {
            string constraintName = Name.Simple(context.id());

            ConstraintType type;
            string[] columns = null;
            string refTable = null;
            string[] refColumns = null;
            SqlExpression checkExp =  null;
            ForeignKeyAction? onDelete = null;
            ForeignKeyAction? onUpdate = null;

            if (context.primaryKeyConstraint() != null) {
                type = ConstraintType.PrimaryKey;

                columns = context.primaryKeyConstraint().columnList().columnName().Select(Name.Simple).ToArray();
            } else if (context.uniqueKeyConstraint() != null) {
                type = ConstraintType.Unique;
                columns = context.uniqueKeyConstraint().columnList().columnName().Select(Name.Simple).ToArray();
            } else if (context.checkConstraint() != null) {
                type = ConstraintType.Check;
                checkExp = Expression.Build(context.checkConstraint().expression());
            } else if (context.foreignKeyConstraint() != null) {
                type = ConstraintType.ForeignKey;
                columns = context.foreignKeyConstraint().columns.columnName().Select(Name.Simple).ToArray();
                refColumns = context.foreignKeyConstraint().refColumns.columnName().Select(Name.Simple).ToArray();
                refTable = Name.Object(context.foreignKeyConstraint().objectName()).ToString();
                var refActions = context.foreignKeyConstraint().referentialAction();
                if (refActions != null && refActions.Length > 0) {
                    foreach (var action in refActions) {
                        if (action.onDelete() != null) {
                            var actionType = GetForeignKeyAction(action.onDelete().referentialActionType().GetText());
                            onDelete = actionType;
                        } else if (action.onUpdate() != null) {
                            var actionType = GetForeignKeyAction(action.onUpdate().referentialActionType().GetText());
                            onUpdate = actionType;
                        }
                    }
                }
            } else {
                throw new ParseCanceledException("Invalid ");
            }

            var constraint = new SqlTableConstraint(constraintName, type, columns);

            if (type == ConstraintType.ForeignKey) {
                constraint.ReferenceTable = refTable;
                constraint.ReferenceColumns = refColumns;
                constraint.OnUpdate = onUpdate ?? ForeignKeyAction.NoAction;
                constraint.OnDelete = onDelete ?? ForeignKeyAction.NoAction;
            } else if (type == ConstraintType.Check) {
                constraint.CheckExpression = checkExp;
            }

            return constraint;
        }
示例#3
0
        public static FunctionArgument Form(PlSqlParser.ArgumentContext context)
        {
            if (context == null)
                return null;

            var id = Name.Simple(context.id());
            var exp = Compile.Expression.Build(context.expressionWrapper());

            return new FunctionArgument {
                Id = id,
                Expression = exp
            };
        }
示例#4
0
文件: Name.cs 项目: deveel/deveeldb
        public static string Simple(PlSqlParser.UserNameContext context)
        {
            if (context == null)
                return null;

            return Simple(context.id());
        }
示例#5
0
文件: Name.cs 项目: deveel/deveeldb
 public static string Simple(PlSqlParser.LabelNameContext context)
 {
     return Simple(context.id());
 }
示例#6
0
文件: Name.cs 项目: deveel/deveeldb
 public static string Simple(PlSqlParser.Column_aliasContext context)
 {
     return Simple(context.id());
 }
示例#7
0
文件: Name.cs 项目: deveel/deveeldb
        public static string Variable(PlSqlParser.Variable_nameContext context)
        {
            if (context.bind_variable() != null)
                return Variable(context.bind_variable());

            return Simple(context.id());
        }
示例#8
0
文件: Name.cs 项目: deveel/deveeldb
 public static string Simple(PlSqlParser.Variable_nameContext context)
 {
     return Simple(context.id());
 }
示例#9
0
文件: Name.cs 项目: deveel/deveeldb
 public static string Simple(PlSqlParser.Parameter_nameContext context)
 {
     return Simple(context.id());
 }