Example #1
0
        protected ISqlExpressionBuilder GetSqlBuilder(IDbCommand cmd)
        {
            ISqlExpressionBuilder sqlBuilder = null;

            sqlBuilder = DbFactory.CreateSqlBuilder(cmd, (q) => { return(BuildSelectInternal(q, sqlBuilder, true)); });
            return(sqlBuilder);
        }
Example #2
0
        /// <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;
        }
        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;
        }
Example #7
0
        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));
        }
Example #8
0
        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);
            }
        }
Example #9
0
        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());
        }
Example #10
0
        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) {}
Example #12
0
 public SqlCe4QueryGenerator(ISqlStatements sqlStatements, ISqlExpressionBuilder sqlExpressionBuilder)
     : base(sqlStatements, sqlExpressionBuilder)
 {
 }
Example #13
0
        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) {}