예제 #1
0
        //Arama Yapısından Sık Kullanılan İç Sorgular İçin Eklendi
        public static SqlQuery ToInnerQuery(this SqlQuery query, string alias)
        {
            if (null != query)
            {
                if (String.IsNullOrEmpty(alias))
                    alias = "T";

                SqlQuery inner = new SqlQuery();
                inner.Text.Append("SELECT * FROM (");
                inner.Combine(query);
                inner.Text.Append(") ");
                inner.Text.Append(alias);
                return inner;
            }
            return null;
        }
예제 #2
0
        public virtual SqlQuery CreateQuery(object entity, IEntityMetaData metaData)
        {
            if (null == entity)
                throw new ArgumentNullException("entity");

            SqlQueryHelper.IndexParameterNames(metaData, this.ParameterIndex);

            bool updatedFieldsEnabled = !this.UpdatedFields.IsEmptyList();

            SqlQuery query = new SqlQuery();
            StringBuilder text = query.Text;
            text.Append("UPDATE ");
            text.Append(metaData.TableName);
            text.Append(" SET ");

            foreach (PropertyMetaData property in metaData.Properties)
            {
                SchemaInfo schema = property.Schema;

                if (schema.IsKey)
                    continue;

                if (schema.DatabaseGeneratedOption != StoreGeneratedPattern.None)
                    continue;

                if (schema.ReadOnly)
                    continue;

                if (updatedFieldsEnabled && !this.UpdatedFields.Contains(schema.ColumnName))
                    continue;

                text.Append(schema.ColumnName);
                text.Append("=");

                SqlQueryHelper.SetColumnValue(ValueSetter.Instance, query, property, entity);

                text.Append(',');
            }
            text.Remove(text.Length - 1, 1);

            query.Combine(SqlQueryHelper.CreateWhereSqlByKeys(metaData, ':', entity));

            if (this.UseSemicolon)
                text.Append(';');

            return query;
        }
        protected override int ExecuteInternal(IEnumerable<IEntityChange> changes, BatchCommandMode mode, IEntityMetaData metaData)
        {
            PropertyMetaData identity = null;
            Dictionary<string, object> outs = new Dictionary<string, object>();

            IEnumerable<IEntityChange> modified = changes.Where(e => e.State == EntityState.Modified);
            IEnumerable<IEntityChange> deleted = changes.Where(e => e.State == EntityState.Deleted);
            IEnumerable<IEntityChange> added = changes.Where(e => e.State == EntityState.Added);

            switch (mode)
            {
                case BatchCommandMode.Batch:

                    SqlQuery batchQuery = new SqlQuery();

                    batchQuery.Text.Append(GlobalInternal.SqlServerBeginStatement);
                    batchQuery.Text.AppendLine();

                    int index = 0;

                    if (!modified.IsEmptyList())
                    {
                        EntitySqlQueryBuilderUpdate updateBuilder = new EntitySqlQueryBuilderUpdate();
                        foreach (IEntityChange change in modified)
                        {
                            updateBuilder.ParameterIndex = index++;
                            updateBuilder.UpdatedFields = change.UpdatedFields;
                            batchQuery.Combine(updateBuilder.CreateQuery(change.Entity, metaData));
                            batchQuery.Text.AppendLine();
                        }
                        batchQuery.Text.AppendLine();
                    }

                    if (!deleted.IsEmptyList())
                    {
                        foreach (IEntityChange change in deleted)
                        {
                            SqlQuery deleteQuery = new SqlQuery();
                            deleteQuery.Text.Append("DELETE FROM ");
                            deleteQuery.Text.Append(metaData.TableName);

                            SqlQueryHelper.IndexParameterNames(metaData, index++);

                            deleteQuery.Combine(SqlQueryHelper.CreateWhereSqlByKeys(metaData, '@', change.Entity));

                            batchQuery.Combine(deleteQuery);
                            batchQuery.Text.AppendLine();
                        }
                        batchQuery.Text.AppendLine();
                    }

                    if (!added.IsEmptyList())
                    {
                        EntitySqlQueryBuilderInsert insertBuilder = new EntitySqlQueryBuilderInsert();
                        foreach (IEntityChange change in added)
                        {
                            insertBuilder.ParameterIndex = index++;
                            batchQuery.Combine(insertBuilder.CreateQuery(change.Entity, metaData, out identity));
                            if (null != identity)
                                outs.Add(identity.ParameterName, change.Entity);

                            batchQuery.Text.AppendLine();
                        }
                    }

                    batchQuery.Text.Append(GlobalInternal.SqlServerEndStatement);

                    int ret = base.DataAccess.ExecuteNonQuery(batchQuery);

                    if (null != identity)//outParameterNames.Count must be equal to entityList.Count.
                    {
                        foreach (KeyValuePair<string, object> kvp in outs)
                        {
                            string outParameterName = kvp.Key;
                            object identityValue = batchQuery.Parameters.Find(outParameterName).Value;
                            identity.Property.SetValue(kvp.Value, identityValue, null);
                        }
                    }

                    return ret;

                case BatchCommandMode.Single:
                    int sum = 0;

                    if (!modified.IsEmptyList())
                    {
                        EntityCommandUpdate updateCommand = new EntityCommandUpdate(base.DataAccess);
                        foreach (IEntityChange change in modified)
                        {
                            updateCommand.UpdatedFields = change.UpdatedFields;
                            sum += updateCommand.UpdateInternal(change.Entity, metaData);
                        }
                    }

                    if (!deleted.IsEmptyList())
                    {
                        EntityCommandDelete deleteCommand = new EntityCommandDelete(base.DataAccess);
                        foreach (IEntityChange change in deleted)
                        {
                            sum += deleteCommand.DeleteInternal(change.Entity, metaData);
                        }
                    }

                    if (!added.IsEmptyList())
                    {
                        EntityCommandInsert insertCommand = new EntityCommandInsert(base.DataAccess);
                        foreach (IEntityChange change in added)
                        {
                            sum += insertCommand.InsertInternal(change.Entity, metaData);
                        }
                    }

                    return sum;

                default:
                    throw new NotSupportedException(mode.ToString());
            }
        }
        protected override int ExecuteInternal(IEnumerable<IEntityChange> changes, BatchCommandMode mode, IEntityMetaData metaData)
        {
            IEnumerable<IEntityChange> modified = changes.Where(e => e.State == EntityState.Modified);
            IEnumerable<IEntityChange> deleted = changes.Where(e => e.State == EntityState.Deleted);
            IEnumerable<IEntityChange> added = changes.Where(e => e.State == EntityState.Added);

            switch (mode)
            {
                case BatchCommandMode.Batch:

                    SqlQuery batchQuery = new SqlQuery();

                    batchQuery.Text.Append(GlobalInternal.BeginStatement);
                    batchQuery.Text.AppendLine();

                    int index = 0;

                    if (!modified.IsEmptyList())
                    {
                        EntitySqlQueryBuilderUpdate updateBuilder = new EntitySqlQueryBuilderUpdate() { UseSemicolon = true };
                        foreach (IEntityChange change in modified)
                        {
                            updateBuilder.ParameterIndex = index++;
                            updateBuilder.UpdatedFields = change.UpdatedFields;
                            batchQuery.Combine(updateBuilder.CreateQuery(change.Entity, metaData));
                            batchQuery.Text.AppendLine();
                        }
                        batchQuery.Text.AppendLine();
                    }

                    if (!deleted.IsEmptyList())
                    {
                        foreach (IEntityChange change in deleted)
                        {
                            SqlQuery deleteQuery = new SqlQuery();
                            deleteQuery.Text.Append("DELETE FROM ");
                            deleteQuery.Text.Append(metaData.TableName);

                            SqlQueryHelper.IndexParameterNames(metaData, index++);

                            deleteQuery.Combine(SqlQueryHelper.CreateWhereSqlByKeys(metaData, '@', change.Entity));

                            batchQuery.Combine(deleteQuery);
                            batchQuery.Text.AppendLine(";");
                        }
                        batchQuery.Text.AppendLine();
                    }

                    if (!added.IsEmptyList())
                    {
                        PropertyMetaData sequenceIdentity = null;
                        EntitySqlQueryBuilderInsert insertBuilder = new EntitySqlQueryBuilderInsert() { UseSemicolon = true };
                        foreach (IEntityChange change in added)
                        {
                            insertBuilder.ParameterIndex = index++;
                            batchQuery.Combine(insertBuilder.CreateQuery(change.Entity, metaData, out sequenceIdentity));

                            batchQuery.Text.AppendLine();
                        }
                    }

                    batchQuery.Text.Append(GlobalInternal.EndStatement);

                    return base.DataAccess.ExecuteNonQuery(batchQuery);

                case BatchCommandMode.Single:
                    int sum = 0;

                    if (!modified.IsEmptyList())
                    {
                        EntityCommandUpdate updateCommand = new EntityCommandUpdate(base.DataAccess);
                        foreach (IEntityChange change in modified)
                        {
                            updateCommand.UpdatedFields = change.UpdatedFields;
                            sum += updateCommand.UpdateInternal(change.Entity, metaData);
                        }
                    }

                    if (!deleted.IsEmptyList())
                    {
                        EntityCommandDelete deleteCommand = new EntityCommandDelete(base.DataAccess);
                        foreach (IEntityChange change in deleted)
                        {
                            sum += deleteCommand.DeleteInternal(change.Entity, metaData);
                        }
                    }

                    if (!added.IsEmptyList())
                    {
                        EntityCommandInsert insertCommand = new EntityCommandInsert(base.DataAccess);
                        foreach (IEntityChange change in added)
                        {
                            sum += insertCommand.InsertInternal(change.Entity, metaData);
                        }
                    }

                    return sum;

                default:
                    throw new NotSupportedException(mode.ToString());
            }
        }
예제 #5
0
        public virtual SqlQuery CreateQuery(object entity, IEntityMetaData metaData, out PropertyMetaData sequenceIdentity)
        {
            EntitySqlQueryBuilderUpdate builderUpdate = new EntitySqlQueryBuilderUpdate() { UseSemicolon = true };
            builderUpdate.ParameterIndex = this.ParameterIndex;
            builderUpdate.UpdatedFields = this.UpdatedFields;

            SqlQuery query = new SqlQuery();
            StringBuilder text = query.Text;

            if (!this.isBatchUpsert)
                text.Append(GlobalInternal.OracleBeginStatement);

            query.Combine(builderUpdate.CreateQuery(entity, metaData));

            text.AppendLine();
            text.Append("IF SQL%ROWCOUNT = 0 THEN ");
            text.AppendLine();

            EntitySqlQueryBuilderInsert builderInsert = new EntitySqlQueryBuilderInsert(this.dataAccess, true) { UseSemicolon = true };
            builderInsert.ParameterIndex = this.ParameterIndex;
            builderInsert.InsertFields = this.InsertFields;

            query.Combine(builderInsert.CreateQuery(entity, metaData, out sequenceIdentity));

            text.AppendLine();
            text.Append("END IF;");

            if (!this.isBatchUpsert)
                text.Append(GlobalInternal.OracleEndStatement);

            return query;
        }
예제 #6
0
            public SqlQuery ToQuery()
            {
                if (null != this.query)
                    return this.query;

                SqlQuery query = new SqlQuery();
                if (null != this.Table)
                {
                    query.Text.Append(this.Table.Alias);
                    query.Text.Append('.');
                }
                query.Combine(this.Criteria.ToQuery());
                return query;
            }
예제 #7
0
 public SqlQuery ToQuery()
 {
     SqlQuery query = new SqlQuery();
     StringBuilder text = query.Text;
     bool justWhereSql = this.columns.Count == 0 || this.tables.Count == 0;
     if (!justWhereSql)
     {
         text.Append("SELECT ");
         foreach (SelectSql.ColumnItem clmn in this.columns)
         {
             text.Append(clmn); text.Append(", ");
         }
         foreach (string sqlColumn in this.customColumnSql)
         {
             text.Append(sqlColumn); text.Append(", ");
         }
         text.Remove(text.Length - 2, 2);
         text.Append(" FROM ");
         text.Append(this.GetLeftTable());
         text.AppendLine();
         foreach (SelectSql.JoinItem item in this.joins)
         {
             text.Append(item);
             text.AppendLine();
         }
     }
     if (this.custom.Text.Length != 0)
     {
         query.Combine(this.custom);
     }
     if (this.wheres.Count > 0)
     {
         if (justWhereSql)
             text.AppendLine();
         text.Append("WHERE ");
         foreach (SelectSql.WhereItem item in this.wheres)
         {
             query.Combine(item.ToQuery());
             query.Text.Append(" AND ");
         }
         query.Text.Remove(query.Text.Length - 5, 5);
     }
     return query;
 }