Exemplo n.º 1
0
        public override ISqlNode VisitDeclare(SqlDeclareNode n)
        {
            // It's a variable node, which is only supported in other dialects. Setup a translation
            if (n.Variable is SqlVariableNode v)
            {
                var symbolInfo = new SymbolInfo
                {
                    OriginalName = v.Name,
                    DefinedAt    = n.Location,
                    Translate    = x => new SqlIdentifierNode(((SqlVariableNode)x).GetBareName(), x.Location),
                    OriginKind   = SymbolOriginKind.UserDeclared
                };

                // Add the original version and also add the translated version, so we can find both
                Current.AddSymbol(v.Name, symbolInfo);
                Current.AddSymbol(v.Name, new SymbolInfo
                {
                    OriginalName = v.Name,
                    DefinedAt    = n.Location,
                    CreatedFrom  = symbolInfo,
                    OriginKind   = SymbolOriginKind.UserDeclared,
                });
                base.VisitDeclare(n);
            }

            var id = n.Variable as SqlIdentifierNode;

            Current.AddSymbol(id.Name, new SymbolInfo
            {
                OriginalName = id.Name,
                DefinedAt    = id.Location,
                OriginKind   = SymbolOriginKind.UserDeclared
            });
            return(base.VisitDeclare(n));
        }
Exemplo n.º 2
0
        public virtual ISqlNode VisitDeclare(SqlDeclareNode n)
        {
            var v = Visit(n.Variable);
            var d = Visit(n.DataType);
            var i = Visit(n.Initializer);

            return(n.Update(v, d, i));
        }
Exemplo n.º 3
0
        public ISqlNode VisitDeclare(SqlDeclareNode n)
        {
            Append("DECLARE ", n.Variable, " ", n.DataType);
            if (n.Initializer != null)
            {
                Append(" := ", n.Initializer);
            }

            return(n);
        }
Exemplo n.º 4
0
        private SqlDeclareNode ParseDeclare(ITokenizer t)
        {
            // "DECLARE" <identifier> <DataType> (":=" <Expression>)?
            // TODO: "DECLARE" <identifier> <DataType> (":=" <Expression>)? ("," <identifier> <DataType> (":=" <Expression>)?)*
            var declare = t.Expect(SqlTokenType.Keyword, "DECLARE");
            var v       = t.Expect(SqlTokenType.Identifier);
            // TODO: Improve data type parsing
            var dataType    = ParseDataType(t);
            var declareNode = new SqlDeclareNode
            {
                Location = declare.Location,
                DataType = dataType,
                Variable = new SqlIdentifierNode(v)
            };

            if (t.NextIs(SqlTokenType.Symbol, ":=", true))
            {
                declareNode.Initializer = ParseScalarExpression(t);
            }
            return(declareNode);
        }
 public override ISqlNode VisitDeclare(SqlDeclareNode n)
 {
     return(base.VisitDeclare(n));
 }