コード例 #1
0
        private void readBodyClauses(QueryModel queryModel, IDocumentStorage storage)
        {
            for (var i = 0; i < queryModel.BodyClauses.Count; i++)
            {
                var clause = queryModel.BodyClauses[i];
                switch (clause)
                {
                case WhereClause where:
                    CurrentStatement.WhereClauses.Add(@where);
                    break;

                case OrderByClause orderBy:
                    CurrentStatement.Orderings.AddRange(orderBy.Orderings);
                    break;

                case AdditionalFromClause additional:
                    var isComplex       = queryModel.BodyClauses.Count > i + 1 || queryModel.ResultOperators.Any() || _provider.AllIncludes.Any();
                    var elementType     = additional.ItemType;
                    var collectionField = storage.Fields.FieldFor(additional.FromExpression);

                    CurrentStatement = CurrentStatement.ToSelectMany(collectionField, _session, isComplex, elementType);


                    break;

                default:
                    throw new NotSupportedException();
                }
            }
        }
コード例 #2
0
ファイル: Statement.cs プロジェクト: worksofbarry/NetRPG
        public static Statement[] ParseDocument(List <RPGToken> Tokens)
        {
            List <Statement> Statements       = new List <Statement>();
            List <RPGToken>  CurrentStatement = new List <RPGToken>();

            foreach (RPGToken token in Tokens)
            {
                if (token.Type == RPGLex.Type.STMT_END)
                {
                    Statements.Add(new Statement(CurrentStatement));
                    CurrentStatement = new List <RPGToken>();
                }
                else
                {
                    CurrentStatement.Add(token);
                }
            }

            //Each statement has an internal line number
            for (int i = 0; i < Statements.Count; i++)
            {
                Statements[i].Line = i;
            }

            return(Statements.ToArray());
        }
コード例 #3
0
        private IQueryHandler <TResult> buildHandlerForCurrentStatement <TResult>()
        {
            if (CurrentStatement.SingleValue)
            {
                return(CurrentStatement.BuildSingleResultHandler <TResult>(_session, TopStatement));
            }

            return(CurrentStatement.SelectClause.BuildHandler <TResult>(_session, TopStatement, CurrentStatement));
        }
コード例 #4
0
        public void BuildDatabaseStatement(QueryStatistics statistics)
        {
            if (statistics != null)
            {
                CurrentStatement.UseStatistics(statistics);
            }

            TopStatement.CompileStructure(new MartenExpressionParser(_session.Serializer, _session.Options));
        }
コード例 #5
0
        public IQueryHandler <TResult> BuildHandler <TResult>()
        {
            // TODO -- expression parser should be a singleton somehow to avoid
            // the object allocations
            TopStatement.CompileStructure(new MartenExpressionParser(_session.Serializer, _session.Options));

            if (CurrentStatement.SingleValue)
            {
                return(CurrentStatement.BuildSingleResultHandler <TResult>(_session));
            }
            return(CurrentStatement.SelectClause.BuildHandler <TResult>(_session, TopStatement));
        }
コード例 #6
0
        public void BuildDatabaseStatement()
        {
            if (_provider.Statistics != null)
            {
                CurrentStatement.UseStatistics(_provider.Statistics);
            }

            var topStatement = TopStatement;

            topStatement.CompileStructure(_session);

            TopStatement = topStatement.Top();
        }
コード例 #7
0
ファイル: LinqHandlerBuilder.cs プロジェクト: srasch/marten
        public void BuildDatabaseStatement(QueryStatistics statistics)
        {
            if (statistics != null)
            {
                CurrentStatement.UseStatistics(statistics);
            }

            var topStatement = TopStatement;

            topStatement.CompileStructure(_session);

            TopStatement = topStatement.Top();
        }
コード例 #8
0
        public static Statement[] ParseDocument(List <RPGToken> Tokens)
        {
            List <Statement> Statements       = new List <Statement>();
            List <RPGToken>  CurrentStatement = new List <RPGToken>();

            foreach (RPGToken token in Tokens)
            {
                if (token.Type == RPGLex.Type.STMT_END)
                {
                    Statements.Add(new Statement(CurrentStatement));
                    CurrentStatement = new List <RPGToken>();
                }
                else
                {
                    CurrentStatement.Add(token);
                }
            }

            return(Statements.ToArray());
        }
コード例 #9
0
        public void BuildDiagnosticCommand(FetchType fetchType, CommandBuilder sql)
        {
            switch (fetchType)
            {
            case FetchType.Any:
                CurrentStatement.ToAny();
                break;

            case FetchType.Count:
                CurrentStatement.ToCount <long>();
                break;

            case FetchType.FetchOne:
                CurrentStatement.Limit = 1;
                break;
            }

            TopStatement.CompileStructure(_session);

            TopStatement.Configure(sql);
        }
コード例 #10
0
ファイル: Dialog.cs プロジェクト: mcmelmon/archfey
    // private

    private void DisplayCurrent()
    {
        DialogPanel.Instance.Dialog = this;
        DialogPanel.Instance.SetSpeaker(Me.Stats.name);
        DialogPanel.Instance.ClearResponses();

        if (CurrentStatement.IsFinalStatement)
        {
            FinalStatement = CurrentStatement;
        }

        DialogPanel.Instance.SetText(CurrentStatement.GetStatementToPlayer());
        List <Response> responses = CurrentStatement.PresentResponses();

        for (int i = 0; i < responses.Count; i++)
        {
            DialogPanel.Instance.AddResponse(i, responses[i]);
        }

        DialogPanel.Instance.gameObject.SetActive(true);
    }
コード例 #11
0
        public void BuildDiagnosticCommand(FetchType fetchType, CommandBuilder sql)
        {
            switch (fetchType)
            {
            case FetchType.Any:
                CurrentStatement.ToAny();
                break;

            case FetchType.Count:
                CurrentStatement.ToCount <long>();
                break;

            case FetchType.FetchOne:
                CurrentStatement.Limit = 1;
                break;
            }

            TopStatement.CompileStructure(new MartenExpressionParser(_session.Serializer, _session.Options));

            TopStatement.Configure(sql);
        }
コード例 #12
0
ファイル: LinqHandlerBuilder.cs プロジェクト: srasch/marten
        private IList <IIncludePlan> readBodyClauses(QueryModel queryModel, IDocumentStorage storage)
        {
            var includes = new List <IIncludePlan>();

            if (!(Model.SelectClause.Selector is QuerySourceReferenceExpression))
            {
                var visitor = new IncludeVisitor(includes);
                visitor.Visit(Model.SelectClause.Selector);
            }

            for (var i = 0; i < queryModel.BodyClauses.Count; i++)
            {
                var clause = queryModel.BodyClauses[i];
                switch (clause)
                {
                case WhereClause where:
                    CurrentStatement.WhereClauses.Add(@where);
                    break;

                case OrderByClause orderBy:
                    CurrentStatement.Orderings.AddRange(orderBy.Orderings);
                    break;

                case AdditionalFromClause additional:
                    var isComplex       = queryModel.BodyClauses.Count > i + 1 || queryModel.ResultOperators.Any() || includes.Any();
                    var elementType     = additional.ItemType;
                    var collectionField = storage.Fields.FieldFor(additional.FromExpression);

                    CurrentStatement = CurrentStatement.ToSelectMany(collectionField, _session, isComplex, elementType);


                    break;

                default:
                    throw new NotSupportedException();
                }
            }

            return(includes);
        }
コード例 #13
0
        public void AddResultOperator(ResultOperatorBase resultOperator)
        {
            switch (resultOperator)
            {
            case TakeResultOperator take:
                TopStatement.Limit = (int)take.Count.Value();
                break;

            case SkipResultOperator skip:
                TopStatement.Offset = (int)skip.Count.Value();
                break;

            case AnyResultOperator _:
                CurrentStatement.ToAny();
                break;

            case CountResultOperator _:
                CurrentStatement.ToCount <int>();
                break;

            case LongCountResultOperator _:
                CurrentStatement.ToCount <long>();
                break;

            case FirstResultOperator first:
                CurrentStatement.Limit                  = 1;
                CurrentStatement.SingleValue            = true;
                CurrentStatement.ReturnDefaultWhenEmpty = first.ReturnDefaultWhenEmpty;
                CurrentStatement.CanBeMultiples         = true;
                break;

            case SingleResultOperator single:
                CurrentStatement.Limit                  = 2;
                CurrentStatement.SingleValue            = true;
                CurrentStatement.ReturnDefaultWhenEmpty = single.ReturnDefaultWhenEmpty;
                CurrentStatement.CanBeMultiples         = false;
                break;

            case DistinctResultOperator _:
                CurrentStatement.ApplySqlOperator("distinct");
                break;

            case AverageResultOperator _:
                CurrentStatement.ApplyAggregateOperator("AVG");
                break;

            case SumResultOperator _:
                CurrentStatement.ApplyAggregateOperator("SUM");
                break;

            case MinResultOperator _:
                CurrentStatement.ApplyAggregateOperator("MIN");
                break;

            case MaxResultOperator _:
                CurrentStatement.ApplyAggregateOperator("MAX");
                break;

            default:
                throw new NotSupportedException("Don't yet know how to deal with " + resultOperator);
            }
        }
コード例 #14
0
        private void AddResultOperator(ResultOperatorBase resultOperator, IFieldMapping fields)
        {
            switch (resultOperator)
            {
            case ISelectableOperator selectable:
                CurrentStatement = selectable.ModifyStatement(CurrentStatement, _session);
                break;

            case TakeResultOperator take:
                CurrentStatement.Limit = (int)take.Count.Value();
                break;

            case SkipResultOperator skip:
                CurrentStatement.Offset = (int)skip.Count.Value();
                break;

            case AnyResultOperator _:
                CurrentStatement.ToAny();
                break;

            case CountResultOperator _:
                if (CurrentStatement.IsDistinct)
                {
                    CurrentStatement.ConvertToCommonTableExpression(_session);
                    CurrentStatement = new CountStatement <int>(CurrentStatement);
                }
                else
                {
                    CurrentStatement.ToCount <int>();
                }
                break;

            case LongCountResultOperator _:
                if (CurrentStatement.IsDistinct)
                {
                    CurrentStatement.ConvertToCommonTableExpression(_session);
                    CurrentStatement = new CountStatement <long>(CurrentStatement);
                }
                else
                {
                    CurrentStatement.ToCount <long>();
                }
                break;

            case FirstResultOperator first:
                CurrentStatement.Limit                  = 1;
                CurrentStatement.SingleValue            = true;
                CurrentStatement.ReturnDefaultWhenEmpty = first.ReturnDefaultWhenEmpty;
                CurrentStatement.CanBeMultiples         = true;
                break;

            case SingleResultOperator single:
                CurrentStatement.Limit                  = 2;
                CurrentStatement.SingleValue            = true;
                CurrentStatement.ReturnDefaultWhenEmpty = single.ReturnDefaultWhenEmpty;
                CurrentStatement.CanBeMultiples         = false;
                break;

            case DistinctResultOperator _:
                CurrentStatement.IsDistinct = true;
                CurrentStatement.ApplySqlOperator("distinct");
                break;

            case AverageResultOperator _:
                CurrentStatement.ApplyAggregateOperator("AVG");
                break;

            case SumResultOperator _:
                CurrentStatement.ApplyAggregateOperator("SUM");
                break;

            case MinResultOperator _:
                CurrentStatement.ApplyAggregateOperator("MIN");
                break;

            case MaxResultOperator _:
                CurrentStatement.ApplyAggregateOperator("MAX");
                break;

            case ToJsonArrayResultOperator _:
                CurrentStatement.ToJsonSelector();
                break;

            case LastResultOperator _:
                throw new InvalidOperationException("Marten does not support Last() or LastOrDefault() queries. Please reverse the ordering and use First()/FirstOrDefault() instead");

            case IncludeResultOperator includeOp:
                var include = includeOp.BuildInclude(_session, fields);
                _provider.AllIncludes.Add(include);
                break;

            default:
                throw new NotSupportedException("Don't yet know how to deal with " + resultOperator);
            }
        }