public async ValueTask <object> ExecuteScalar(string sql, SqlParameters parameters = null, object data = null) { sql = OffsetLimitUtils.TransformQuery(sql); var tree = _sqlParser.Parse(sql); var mainVisitor = new MainVisitor(new VisitorMetadata(parameters, _tablesMetadata, _searchExpressionProvider, _operationsProvider)); tree.Accept(mainVisitor); //Convert into execute stages var executeStages = _stageConverter.Convert(mainVisitor.Stages); var result = await _queryExecutor.Execute(executeStages, data); var enumerator = result.Result.GetEnumerator(); if (!enumerator.MoveNext()) { return(null); } else { var obj = enumerator.Current; return(AnonTypeUtils.GetDelegates(obj.GetType())[0](obj)); } }
private IReadOnlyList <IQueryStage> GetStages(StatementList tree, SqlParameters parameters) { var mainVisitor = new MainVisitor(new VisitorMetadata(parameters, _tablesMetadata, _searchExpressionProvider, _operationsProvider)); tree.Accept(mainVisitor); return(mainVisitor.Stages); }
static void Main(string[] args) { var fstream = new FileStream(args [0], FileMode.Open); var foutstream = new StreamWriter(args [1]); var input = new AntlrInputStream(fstream); var lexer = new graLexer(input); var tokens = new CommonTokenStream(lexer); var parser = new graParser(tokens); MainVisitor vis = new MainVisitor(); List <String> code = (List <String>)vis.VisitProgram(parser.program()); foreach (String s in code) { foutstream.Write(s); foutstream.Write(Environment.NewLine); } foutstream.Close(); //Console.Read(); }
private IReadOnlyList <IQueryStage> GetStages(string sql, SqlParameters parameters) { if (string.IsNullOrEmpty(sql)) { throw new SqlErrorException("Empty query string"); } var tree = _sqlParser.Parse(sql, out var errors); if (errors.Count > 0) { var firstError = errors.FirstOrDefault(); throw new SqlErrorException(firstError.Message); } var mainVisitor = new MainVisitor(new VisitorMetadata(parameters, _tablesMetadata, _searchExpressionProvider, _operationsProvider)); tree.Accept(mainVisitor); return(mainVisitor.Stages); }
public override void VisitFromClause(FromClause fromClause) { var tableReference = fromClause.TableReference; if (tableReference is FromTableReference namedTableReference) { var tableName = namedTableReference.TableName; Debug.Assert(tableName != null); if (!_visitorMetadata.TablesMetadata.TryGetTable(tableName, out _table)) { throw new SqlErrorException($"The table '{tableName}' was not found"); } //Add the table name to the aliases as well, to support using the tablename infront of columns FromAliases.AddAlias(tableName); var alias = namedTableReference?.Alias; if (alias != null) { FromAliases.AddAlias(alias); } } else if (tableReference is Subquery queryDerivedTable) { MainVisitor mainVisitor = new MainVisitor(_visitorMetadata); queryDerivedTable.Accept(mainVisitor); Stages = mainVisitor.Stages; var alias = queryDerivedTable?.Alias; if (alias != null) { FromAliases.AddAlias(alias); } } else { throw new SqlErrorException("Subqueries or joins are not supported at this time"); } }
public MainParser(MainVisitor mainVisitor) { _mainVisitor = mainVisitor; }