protected ISqlExpressionBuilder GetSqlBuilder(IDbCommand cmd) { ISqlExpressionBuilder sqlBuilder = null; sqlBuilder = DbFactory.CreateSqlBuilder(cmd, (q) => { return(BuildSelectInternal(q, sqlBuilder, true)); }); return(sqlBuilder); }
/// <summary> /// Generates SELECT SQL statement by given <see cref="Query"/> and <see cref="ISqlExpressionBuilder"/>. /// </summary> /// <param name="query">formal query structure</param> /// <param name="sqlBuilder">SQL builder component</param> /// <param name="isSubquery">subquery flag (true if this is sub-query select)</param> /// <returns>SQL select command text</returns> public virtual string FormatSelectSql(Query query, ISqlExpressionBuilder sqlBuilder, bool isSubquery) { var isCount = IsCountQuery(query); string columns = BuildSelectColumns(query, sqlBuilder); string orderBy = BuildOrderBy(query, sqlBuilder); string whereExpression = BuildWhere(query, sqlBuilder); var tblName = sqlBuilder.BuildTableName(query.Table); var selectTpl = new StringTemplate(SelectTemplate); return(selectTpl.FormatTemplate((varName) => { switch (varName) { case "table": return new StringTemplate.TokenResult(tblName); case "where": return new StringTemplate.TokenResult(whereExpression); case "orderby": return isCount ? StringTemplate.TokenResult.NotApplicable : new StringTemplate.TokenResult(orderBy); case "columns": return new StringTemplate.TokenResult(columns); case "recordoffset": return new StringTemplate.TokenResult(query.RecordOffset); case "recordcount": return query.RecordCount < Int32.MaxValue ? new StringTemplate.TokenResult(query.RecordCount) : StringTemplate.TokenResult.NotDefined; case "recordtop": return query.RecordCount < Int32.MaxValue ? new StringTemplate.TokenResult(query.RecordOffset + query.RecordCount) : StringTemplate.TokenResult.NotDefined; } if (query.ExtendedProperties != null && query.ExtendedProperties.ContainsKey(varName)) { return new StringTemplate.TokenResult(query.ExtendedProperties[varName]); } return StringTemplate.TokenResult.NotDefined; })); }
protected DbQueryGenerator(ISqlStatements sqlStatements, ISqlExpressionBuilder sqlExpressionBuilder) { Ensure.That(sqlStatements, "sqlStatements").IsNotNull(); Ensure.That(sqlExpressionBuilder, "sqlExpressionBuilder").IsNotNull(); SqlStatements = sqlStatements; SqlExpressionBuilder = sqlExpressionBuilder; }
public DbSessionAdvanced(ISessionExecutionContext executionContext, IDbQueryGenerator queryGenerator, ISqlExpressionBuilder sqlExpressionBuilder) { Ensure.That(queryGenerator, "queryGenerator").IsNotNull(); Ensure.That(sqlExpressionBuilder, "sqlExpressionBuilder").IsNotNull(); Ensure.That(executionContext, "executionContext").IsNotNull(); ExecutionContext = executionContext; QueryGenerator = queryGenerator; SqlExpressionBuilder = sqlExpressionBuilder; }
protected DbSession(ISisoDatabase db) { Ensure.That(db, "db").IsNotNull(); _id = Guid.NewGuid(); _db = db; DbClient = Db.ProviderFactory.GetTransactionalDbClient(Db); ExecutionContext = new SessionExecutionContext(this); Status = SessionStatus.Active; InternalEvents = new SessionEvents(); SqlStatements = Db.ProviderFactory.GetSqlStatements(); QueryGenerator = Db.ProviderFactory.GetDbQueryGenerator(); SqlExpressionBuilder = Db.ProviderFactory.GetSqlExpressionBuilder(); _queryEngine = new DbQueryEngine(ExecutionContext, QueryGenerator); _advanced = new DbSessionAdvanced(ExecutionContext, QueryGenerator, SqlExpressionBuilder); CacheConsumeMode = CacheConsumeModes.UpdateCacheWithDbResult; }
internal string BuildSelectInternal(Query query, ISqlExpressionBuilder sqlBuilder, bool isSubquery) { DbDataView view = null; if (Views == null || !Views.TryGetValue(query.Table.Name, out view)) { // default template if (defaultSelectView != null && defaultSelectView.SelectTemplate == SelectTemplate) { view = defaultSelectView; } else { view = defaultSelectView = new DbDataView(SelectTemplate); } } return(view.FormatSelectSql(query, sqlBuilder, isSubquery)); }
string BuildGroupBy(Query query, ISqlExpressionBuilder sqlBuilder) { if (query.Fields == null || query.Fields.Length == 0 || !query.Fields.Any(isAggregateField)) { return(null); } var groupByCols = new StringBuilder(); foreach (var qField in query.Fields) { if (!isAggregateField(qField)) { var f = qField; if (FieldMapping != null && FieldMapping.ContainsKey(f.Name)) { f = new QField(f.Name, FieldMapping[f.Name]); } if (groupByCols.Length > 0) { groupByCols.Append(','); } groupByCols.Append(sqlBuilder.BuildValue((IQueryValue)f)); } } return(groupByCols.Length > 0 ? groupByCols.ToString() : null); bool isAggregateField(QField fld) { if (fld is QAggregateField) { return(true); } // special handling for count(*) if (fld.Expression != null && fld.Expression.ToLower() == QField.Count.Expression) { return(true); } return(false); } }
string BuildOrderBy(Query query, ISqlExpressionBuilder sqlBuilder) { var orderBy = new StringBuilder(); if (query.Sort != null && query.Sort.Length > 0) { foreach (var sortFld in query.Sort) { if (orderBy.Length > 0) { orderBy.Append(','); } orderBy.Append(sqlBuilder.BuildValue((IQueryValue)sortFld.Field)); orderBy.Append(' '); orderBy.Append(sortFld.SortDirection == ListSortDirection.Ascending ? QSort.Asc : QSort.Desc); } } else { return(null); } return(orderBy.ToString()); }
string BuildSelectColumns(Query query, ISqlExpressionBuilder sqlBuilder) { // Compose fields part if (query.Fields == null || query.Fields.Length == 0) { return(ApplyFieldMapping("*")); } var columns = new StringBuilder(); foreach (var qField in query.Fields) { var f = qField; if (FieldMapping != null && FieldMapping.ContainsKey(f.Name)) { f = new QField(f.Name, FieldMapping[f.Name]); } var fld = sqlBuilder.BuildValue((IQueryValue)f); if (fld != f.Name && f.Expression != null) // use "as" only for expression-fields // special handling for 'count(*)' mapping { if (f.Expression.ToLower() == "count(*)") { fld = ApplyFieldMapping("count(*)"); } fld = String.IsNullOrEmpty(f.Name) ? fld : String.Format("{0} as {1}", fld, sqlBuilder.BuildValue((QField)f.Name)); } if (columns.Length > 0) { columns.Append(','); } columns.Append(fld); } return(columns.ToString()); }
public Sql2005QueryGenerator(ISqlStatements sqlStatements, ISqlExpressionBuilder sqlExpressionBuilder) : base(sqlStatements, sqlExpressionBuilder) {}
public SqlCe4QueryGenerator(ISqlStatements sqlStatements, ISqlExpressionBuilder sqlExpressionBuilder) : base(sqlStatements, sqlExpressionBuilder) { }
string BuildWhere(Query query, ISqlExpressionBuilder sqlBuilder) { var condition = FieldMapping == null ? query.Condition : DataHelper.MapQValue(query.Condition, ApplyFieldMapping); return(sqlBuilder.BuildExpression(condition)); }
protected SqlServerQueryGenerator(ISqlStatements sqlStatements, ISqlExpressionBuilder sqlExpressionBuilder) : base(sqlStatements, sqlExpressionBuilder) {}