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)); }
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)); }
public ISqlNode VisitDeclare(SqlDeclareNode n) { Append("DECLARE ", n.Variable, " ", n.DataType); if (n.Initializer != null) { Append(" := ", n.Initializer); } return(n); }
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)); }