/// <summary> /// Get the command from provider, check connection is opened, affect connection and transaction /// Prepare the command parameters and add scope parameters /// </summary> public async Task <(DbCommand Command, bool IsBatch)> GetCommandAsync(DbCommandType commandType, DbConnection connection, DbTransaction transaction, SyncFilter filter = null) { // Create the key var commandKey = $"{connection.DataSource}-{connection.Database}-{this.TableDescription.GetFullName()}-{commandType}"; var(command, isBatch) = GetCommand(commandType, filter); if (command == null) { return(null, false); } // Add Parameters await this.AddCommandParametersAsync(commandType, command, connection, transaction, filter).ConfigureAwait(false); if (command == null) { throw new MissingCommandException(commandType.ToString()); } if (connection == null) { throw new MissingConnectionException(); } if (connection.State != ConnectionState.Open) { throw new ConnectionClosedException(connection); } command.Connection = connection; command.Transaction = transaction; // Get a lazy command instance var lazyCommand = commands.GetOrAdd(commandKey, k => new Lazy <SyncCommand>(() => { var syncCommand = new SyncCommand(commandKey); return(syncCommand); })); // lazyCommand.Metadata is a boolean indicating if the command is already prepared on the server if (lazyCommand.Value.IsPrepared == true) { return(command, isBatch); } // Testing The Prepare() performance increase command.Prepare(); // Adding this command as prepared lazyCommand.Value.IsPrepared = true; commands.AddOrUpdate(commandKey, lazyCommand, (key, lc) => new Lazy <SyncCommand>(() => lc.Value)); return(command, isBatch); }
public string GetCommandName(DbCommandType objectType, IEnumerable <string> adds = null) { if (!_names.ContainsKey(objectType)) { throw new NotSupportedException( $"MySql provider does not support the command type {objectType.ToString()}"); } return(_names[objectType]); }
/// <summary> /// Get the command from provider, check connection is opened, affect connection and transaction /// Prepare the command parameters and add scope parameters /// </summary> internal async Task <DbCommand> PrepareCommandAsync(DbCommandType commandType, DbConnection connection, DbTransaction transaction, SyncFilter filter = null) { // Create the key var commandKey = $"{connection.DataSource}-{connection.Database}-{this.TableDescription.GetFullName()}-{commandType}"; // Get a lazy command instance var lazyCommand = commands.GetOrAdd(commandKey, k => new Lazy <DbCommand>(() => GetCommand(commandType, filter))); // Get the concrete instance var command = lazyCommand.Value; if (command == null) { throw new MissingCommandException(commandType.ToString()); } if (connection == null) { throw new MissingConnectionException(); } if (connection.State != ConnectionState.Open) { throw new ConnectionClosedException(connection); } command.Connection = connection; if (transaction != null) { command.Transaction = transaction; } // Add Parameters await this.AddCommandParametersAsync(commandType, command, connection, transaction, filter).ConfigureAwait(false); // Testing The Prepare() performance increase command.Prepare(); return(command); }
public string GetCommandName(DbCommandType objectType, SyncFilter filter = null) { if (!names.ContainsKey(objectType)) { throw new NotSupportedException($"Sqlite provider does not support the command type {objectType.ToString()}"); } var commandName = names[objectType]; // concat filter name //if (filter != null) // commandName = string.Format(commandName, filter.GetFilterName()); return(commandName); }
public string GetCommandName(DbCommandType objectType, IEnumerable <FilterClause> filters = null) { if (!names.ContainsKey(objectType)) { throw new NotSupportedException($"Sqlite provider does not support the command type {objectType.ToString()}"); } var commandName = names[objectType]; if (filters != null) { string name = ""; string sep = ""; foreach (var c in filters) { var columnName = ParserName.Parse(c.ColumnName).Unquoted().Normalized().ToString(); name += $"{columnName}{sep}"; sep = "_"; } commandName = string.Format(commandName, name); } return(commandName); }