/// <summary> /// Set the default stored procedures names /// </summary> private void SetDefaultNames() { var tpref = this.Setup.TriggersPrefix != null ? this.Setup.TriggersPrefix : ""; var tsuf = this.Setup.TriggersSuffix != null ? this.Setup.TriggersSuffix : ""; this.AddName(DbCommandType.InsertTrigger, string.Format(insertTriggerName, $"{tpref}{tableName.Unquoted().Normalized().ToString()}{tsuf}")); this.AddName(DbCommandType.UpdateTrigger, string.Format(updateTriggerName, $"{tpref}{tableName.Unquoted().Normalized().ToString()}{tsuf}")); this.AddName(DbCommandType.DeleteTrigger, string.Format(deleteTriggerName, $"{tpref}{tableName.Unquoted().Normalized().ToString()}{tsuf}")); // Check if we have mutables columns var hasMutableColumns = TableDescription.GetMutableColumns(false).Any(); // Select changes this.CreateSelectChangesCommandText(); this.CreateSelectRowCommandText(); this.CreateSelectInitializedCommandText(); this.CreateDeleteCommandText(); this.CreateDeleteMetadataCommandText(); this.CreateUpdateCommandText(hasMutableColumns); this.CreateResetCommandText(); this.CreateUpdateUntrackedRowsCommand(); // Sqlite does not have any constraints, so just return a simple statement this.AddName(DbCommandType.DisableConstraints, "Select 0"); // PRAGMA foreign_keys = OFF this.AddName(DbCommandType.EnableConstraints, "Select 0"); }
public async Task CreateStoredProceduresAsync(DbConnection connection, DbTransaction transaction) { if (TableDescription.PrimaryKeys.Count <= 0) { throw new MissingPrimaryKeyException(TableDescription.TableName); } // Check if we have mutables columns var hasMutableColumns = TableDescription.GetMutableColumns(false).Any(); var alreadyOpened = connection.State != ConnectionState.Closed; if (!alreadyOpened) { await connection.OpenAsync().ConfigureAwait(false); } // could be null var procBuilder = CreateProcBuilder(); if (procBuilder == null) { return; } await procBuilder.CreateSelectIncrementalChangesAsync(this.Filter, connection, transaction).ConfigureAwait(false); await procBuilder.CreateSelectInitializedChangesAsync(this.Filter, connection, transaction).ConfigureAwait(false); await procBuilder.CreateSelectRowAsync(connection, transaction).ConfigureAwait(false); await procBuilder.CreateUpdateAsync(hasMutableColumns, connection, transaction).ConfigureAwait(false); await procBuilder.CreateDeleteAsync(connection, transaction).ConfigureAwait(false); await procBuilder.CreateDeleteMetadataAsync(connection, transaction).ConfigureAwait(false); await procBuilder.CreateResetAsync(connection, transaction).ConfigureAwait(false); if (this.UseBulkProcedures && await procBuilder.NeedToCreateTypeAsync(DbCommandType.BulkTableType, connection, transaction).ConfigureAwait(false)) { await procBuilder.CreateTVPTypeAsync(connection, transaction).ConfigureAwait(false); await procBuilder.CreateBulkUpdateAsync(hasMutableColumns, connection, transaction).ConfigureAwait(false); await procBuilder.CreateBulkDeleteAsync(connection, transaction).ConfigureAwait(false); } if (!alreadyOpened) { connection.Close(); } }