public override FieldIndex[] Select <T>(ExpressionParserOld <T> parser) { ParsingTracer.WriteLine(this); ParsingTracer.WriteLine(QuerySource); ParsingTracer.IncIndentLevel(); if (_index == null) { SetSubIndex(parser); _index = new FieldIndex[_subIndex.Length]; for (var i = 0; i < _subIndex.Length; i++) { var col = QuerySource.SubSql.Select.Columns[_subIndex[i].Index]; _index[i] = new FieldIndex { Index = QuerySource.SqlQuery.Select.Add(col), Field = this }; } } ParsingTracer.DecIndentLevel(); ParsingTracer.WriteLine(QuerySource); return(_index); }
public override ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser) { SetSubIndex(parser); if (_subIndex.Length != 1) { throw new LinqException("Cannot convert '{0}' to SQL.", Field.GetExpressions(parser)[0]); } return(new [] { QuerySource.SubSql.Select.Columns[_subIndex[0].Index] }); }
void SetSubIndex <T>(ExpressionParserOld <T> parser) { if (_subIndex == null) { _subIndex = Field.Select(parser); for (var i = 0; i < _subIndex.Length; i++) { var idx = _subIndex[i]; var f = QuerySource.BaseQuery.GetField(idx.Field); if (f != null && f != idx.Field) { var idxs = f.Select(parser); if (idxs.Length == 1) { _subIndex[i] = idxs[0]; } } } if (QuerySource.SubSql.HasUnion) { var sub = QuerySource.BaseQuery; var idx = sub.Fields.IndexOf(Field); var mi = sub.GetMember(Field); foreach (var union in QuerySource.Unions) { if (mi != null) { var f = union.GetField(mi, _ => _ is QuerySource); if (f != null) { f.Select(parser); continue; } if (union is QuerySource.Expr) { union.SqlQuery.Select.Add(new SqlValue(null)); continue; } } union.Fields[idx].Select(parser); } } } }
public override FieldIndex[] Select <T>(ExpressionParserOld <T> _) { ParsingTracer.WriteLine(this); ParsingTracer.WriteLine("table", Table); ParsingTracer.IncIndentLevel(); var index = new[] { new FieldIndex { Index = Table.SqlQuery.Select.Add(Field, Field.Alias), Field = this } }; ParsingTracer.DecIndentLevel(); ParsingTracer.WriteLine("table", Table); return(index); }
//ISqlExpression _sqlExpression; public override FieldIndex[] Select <T>(ExpressionParserOld <T> parser) { if (_index == null) { var idx = _queryField.Select(parser); var expr = idx[0].Field.GetExpressions(parser); _index = new[] { new FieldIndex { Index = _querySource.SqlQuery.Select.Add(expr[0]), Field = this } }; } return(_index); }
public override FieldIndex[] Select <T>(ExpressionParserOld <T> parser) { ParsingTracer.WriteLine(this); ParsingTracer.WriteLine(GroupBySource.BaseQuery); ParsingTracer.IncIndentLevel(); if (_index == null) { _index = GroupBySource.BaseQuery.Select(parser); } ParsingTracer.DecIndentLevel(); ParsingTracer.WriteLine(GroupBySource.BaseQuery); return(_index); }
public override ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser) { if (_sqlExpression == null) { if (_inParsing) { return(null); } _inParsing = true; _sqlExpression = Parse(parser, QuerySource.Sources); _inParsing = false; } return(new [] { _sqlExpression }); }
ISqlExpression Parse <T>(ExpressionParserOld <T> parser, params QuerySource[] sources) { var expr = parser.ParseExpression(Expr, sources); if (expr is SqlQuery.SearchCondition) { /* * expr = parser.Convert(new SqlFunction("CASE", * expr, new SqlValue(true), * new SqlQuery.SearchCondition(new[] { new SqlQuery.Condition(true, (SqlQuery.SearchCondition)expr) }), new SqlValue(false), * new SqlValue(false))); */ expr = parser.Convert(new SqlFunction(typeof(bool), "CASE", expr, new SqlValue(true), new SqlValue(false))); } return(expr); }
public override FieldIndex[] Select <T>(ExpressionParserOld <T> parser) { ParsingTracer.WriteLine(this); ParsingTracer.WriteLine(QuerySource); ParsingTracer.IncIndentLevel(); if (_index == null) { if (_sqlExpression == null) { _sqlExpression = Parse(parser, QuerySource.Sources); } _index = new[] { new FieldIndex { Index = QuerySource.SqlQuery.Select.Add(_sqlExpression, _alias), Field = this } }; } ParsingTracer.DecIndentLevel(); ParsingTracer.WriteLine(QuerySource); return(_index); }
Query <T> GetInfo(IDataContext dataContext) { var dataContextInfo = DataContextInfo.Create(dataContext); string lastContextID; MappingSchema lastMappingSchema; Query <T> query; lock (_sync) { lastContextID = _lastContextID; lastMappingSchema = _lastMappingSchema; query = _lastQuery; } var contextID = dataContextInfo.ContextID; var mappingSchema = dataContextInfo.MappingSchema; if (lastContextID != contextID || lastMappingSchema != mappingSchema) { query = null; } if (query == null) { var key = new { contextID, mappingSchema }; lock (_sync) _infos.TryGetValue(key, out query); if (query == null) { lock (_sync) { _infos.TryGetValue(key, out query); if (query == null) { #if NEW_PARSER query = new ExpressionBuilder(new Query <T>(), dataContextInfo, _expression, _lambda.Parameters.ToArray()) .Build <T>(); #else query = new ExpressionParserOld <T>().Parse( contextID, mappingSchema, dataContextInfo.CreateSqlProvider, _expression, _lambda.Parameters.ToArray()); #endif _infos.Add(key, query); _lastContextID = contextID; _lastMappingSchema = mappingSchema; _lastQuery = query; } } } } return(query); }
public abstract ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser);
public abstract FieldIndex[] Select <T>(ExpressionParserOld <T> parser);
public override ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser) { throw new NotImplementedException(); }
public override ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser) { return(new [] { Field }); }
public override ISqlExpression[] GetExpressions <T>(ExpressionParserOld <T> parser) { return(GroupBySource.BaseQuery.GetExpressions(parser)); }