//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; }
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()); } }
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; }
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; }
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; }