Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        private IReadOnlyList <IQueryStage> GetStages(StatementList tree, SqlParameters parameters)
        {
            var mainVisitor = new MainVisitor(new VisitorMetadata(parameters, _tablesMetadata, _searchExpressionProvider, _operationsProvider));

            tree.Accept(mainVisitor);

            return(mainVisitor.Stages);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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");
            }
        }
Esempio n. 6
0
 public MainParser(MainVisitor mainVisitor)
 {
     _mainVisitor = mainVisitor;
 }