/// <summary>
        /// Default implementation of a Get Query
        /// </summary>
        /// <param name="tableInfo">table information about the entity</param>
        /// <param name="sql">a sql statement or partial statement</param>
        /// <param name="cache">true if this query should be cached</param>
        /// <returns>A sql statement that selects a single item</returns>
        public virtual string GetQuery(TableInfo tableInfo, string sql, bool cache = false)
        {
            var q = new SqlParser(sql ?? "");

            if (q.Sql.StartsWith(";"))
            {
                return(q.Sql.Substring(1));
            }

            if (!q.IsSelect)
            {
                return(GetQueries.Acquire(
                           tableInfo.ClassType.TypeHandle,
                           () => cache && string.IsNullOrEmpty(q.Sql),
                           () =>
                {
                    var wc = string.IsNullOrWhiteSpace(q.Sql) ? $"where {EscapeWhereList(tableInfo.KeyColumns)}" : q.Sql;

                    if (string.IsNullOrEmpty(q.FromClause))
                    {
                        return $"select {EscapeColumnListWithAliases(tableInfo.SelectColumns, tableInfo.TableName)} from { EscapeTableName(tableInfo)} {wc}";
                    }
                    else
                    {
                        return $"select {EscapeColumnListWithAliases(tableInfo.SelectColumns, tableInfo.TableName)} {wc}";
                    }
                }
                           ));
            }
            return(q.Sql);
        }
 public virtual string InsertQuery(TableInfo tableInfo)
 {
     return(InsertQueries.Acquire(
                tableInfo.ClassType.TypeHandle,
                () => true,
                () => $"insert into { EscapeTableName(tableInfo)} ({EscapeColumnList(tableInfo.InsertColumns)}) values ({EscapeParameters(tableInfo.InsertColumns)}) "
                ));
 }
 public virtual string DeleteQuery(TableInfo tableInfo)
 {
     return(DeleteQueries.Acquire(
                tableInfo.ClassType.TypeHandle,
                () => true,
                () =>
     {
         return $"delete from {EscapeTableName(tableInfo)} where {EscapeWhereList(tableInfo.KeyColumns)}";
     }
                ));
 }
 public virtual string UpdateQuery(TableInfo tableInfo, IEnumerable <string> columnsToUpdate)
 {
     return(UpdateQueries.Acquire(
                tableInfo.ClassType.TypeHandle,
                () => columnsToUpdate == null || !columnsToUpdate.Any(),
                () =>
     {
         var updates = tableInfo.UpdateColumns.Where(ci => (columnsToUpdate == null || !columnsToUpdate.Any() || columnsToUpdate.Contains(ci.PropertyName)));
         return $"update {EscapeTableName(tableInfo)} set {EscapeAssignmentList(updates)} where {EscapeWhereList(tableInfo.KeyColumns)}";
     }
                ));
 }
 public virtual string GetQuery(TableInfo tableInfo, IEnumerable <string> columnsToWhere)
 {
     return(GetQueries.Acquire(
                tableInfo.ClassType.TypeHandle,
                () => true,
                () =>
     {
         var wc = columnsToWhere != null && columnsToWhere.Any() ? $"where {EscapeWhereList(columnsToWhere)}" : "";
         return $"select {EscapeColumnListWithAliases(tableInfo.SelectColumns, tableInfo.TableName)} from { EscapeTableName(tableInfo)} {wc}";
     }
                ));
 }
Example #6
0
        /// <summary>
        ///     Default implementation of a Get Query
        /// </summary>
        /// <param name="tableInfo">table information about the entity</param>
        /// <param name="sql">a sql statement or partial statement</param>
        /// <param name="cache">true if this query should be cached</param>
        /// <returns>A sql statement that selects a single item</returns>
        public virtual string GetQuery(TableInfo tableInfo, string sql, bool cache = false)
        {
            var q = new SqlParser(sql ?? "");

            if (q.Sql.StartsWith(";"))
            {
                return(q.Sql.Substring(1));
            }

            if (!q.IsSelect)
            {
                return(GetQueries.Acquire(
                           tableInfo.ClassType.TypeHandle,
                           () => cache && string.IsNullOrEmpty(q.Sql),
                           () => string.IsNullOrEmpty(q.FromClause)
                        ? $"select {EscapeColumnListWithAliases(tableInfo.SelectColumns, tableInfo.TableName)} from {EscapeTableName(tableInfo)} {q.Sql}"
                        : $"select {EscapeColumnListWithAliases(tableInfo.SelectColumns, tableInfo.TableName)} {q.Sql}"));
            }
            return(q.Sql);
        }
Example #7
0
 /// <summary>
 ///     Default implementation of an exists object query
 /// </summary>
 /// <param name="tableInfo">table information about the entity</param>
 /// <returns>An exists sql statement</returns>
 /// <remarks>
 ///     Statements are cached by type handle.
 /// </remarks>
 public virtual string ExistsQuery(TableInfo tableInfo) =>
 ExistsQueries.Acquire(
     tableInfo.ClassType.TypeHandle,
     () => true,
     () => BuildExistsQuery(tableInfo)
     );
Example #8
0
 /// <summary>
 ///     Default implementation of an update query
 /// </summary>
 /// <param name="tableInfo">table information about the entity</param>
 /// <param name="columnsToUpdate">columns to be updated</param>
 /// <returns>An update sql statement</returns>
 /// <remarks>
 ///     Statements are cached by type handle.
 /// </remarks>
 public virtual string UpdateQuery(TableInfo tableInfo, IEnumerable <string> columnsToUpdate) =>
 UpdateQueries.Acquire(
     tableInfo.ClassType.TypeHandle,
     () => columnsToUpdate == null || !columnsToUpdate.Any(),
     () => BuildUpdateQuery(tableInfo, columnsToUpdate));
Example #9
0
 /// <summary>
 ///     Default implementation of an insert query
 /// </summary>
 /// <param name="tableInfo">table information about the entity</param>
 /// <returns>An insert sql statement</returns>
 /// <remarks>
 ///     Statements are cached by type handle.
 /// </remarks>
 public virtual string InsertQuery(TableInfo tableInfo) =>
 InsertQueries.Acquire(
     tableInfo.ClassType.TypeHandle,
     () => true,
     () => BuildInsertQuery(tableInfo)
     );