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(); } } }
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()); }
private IQueryHandler <TResult> buildHandlerForCurrentStatement <TResult>() { if (CurrentStatement.SingleValue) { return(CurrentStatement.BuildSingleResultHandler <TResult>(_session, TopStatement)); } return(CurrentStatement.SelectClause.BuildHandler <TResult>(_session, TopStatement, CurrentStatement)); }
public void BuildDatabaseStatement(QueryStatistics statistics) { if (statistics != null) { CurrentStatement.UseStatistics(statistics); } TopStatement.CompileStructure(new MartenExpressionParser(_session.Serializer, _session.Options)); }
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)); }
public void BuildDatabaseStatement() { if (_provider.Statistics != null) { CurrentStatement.UseStatistics(_provider.Statistics); } var topStatement = TopStatement; topStatement.CompileStructure(_session); TopStatement = topStatement.Top(); }
public void BuildDatabaseStatement(QueryStatistics statistics) { if (statistics != null) { CurrentStatement.UseStatistics(statistics); } var topStatement = TopStatement; topStatement.CompileStructure(_session); TopStatement = topStatement.Top(); }
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()); }
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); }
// 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); }
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); }
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); }
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); } }
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); } }