/// <summary> /// Gets a command text from the cache for the <see cref="DbConnectionExtension.Update{TEntity}(IDbConnection, TEntity, QueryGroup, int?, IDbTransaction, ITrace, IStatementBuilder)"/> operation. /// </summary> /// <typeparam name="TEntity">The type of the target entity.</typeparam> /// <param name="request">The request object.</param> /// <returns>The cached command text.</returns> public static string GetUpdateText <TEntity>(UpdateRequest request) where TEntity : class { var commandText = (string)null; if (m_cache.TryGetValue(request, out commandText) == false) { var statementBuilder = (request.StatementBuilder ?? StatementBuilderMapper.Get(request.Connection?.GetType())?.StatementBuilder ?? new SqlDbStatementBuilder()); commandText = statementBuilder.CreateUpdate(queryBuilder: new QueryBuilder <TEntity>(), where : request.Where); m_cache.TryAdd(request, commandText); } else { request.Where?.AppendParametersPrefix(); } return(commandText); }
/// <summary> /// Initializes all necessary settings for MySql. /// </summary> public static void Initialize() { // Skip if already initialized if (IsInitialized == true) { return; } // Map the DbSetting DbSettingMapper.Add(typeof(MySqlConnection), new MySqlConnectorDbSetting(), true); // Map the DbHelper DbHelperMapper.Add(typeof(MySqlConnection), new MySqlConnectorDbHelper(), true); // Map the Statement Builder StatementBuilderMapper.Add(typeof(MySqlConnection), new MySqlConnectorStatementBuilder(), true); // Set the flag IsInitialized = true; }
/// <summary> /// Gets a command text from the cache for the <see cref="DbConnectionExtension.InlineMerge{TEntity}(IDbConnection, object, bool?, int?, IDbTransaction, ITrace, IStatementBuilder)"/> operation. /// </summary> /// <typeparam name="TEntity">The type of the target entity.</typeparam> /// <param name="request">The request object.</param> /// <returns>The cached command text.</returns> public static string GetInlineMergeText <TEntity>(InlineMergeRequest request) where TEntity : class { var commandText = (string)null; if (m_cache.TryGetValue(request, out commandText) == false) { var primary = PrimaryKeyCache.Get <TEntity>(); var identity = IdentityCache.Get <TEntity>(); if (identity != null && identity != primary) { throw new InvalidOperationException($"Identity property must be the primary property for type '{typeof(TEntity).FullName}'."); } var isPrimaryIdentity = (identity != null); var statementBuilder = (request.StatementBuilder ?? StatementBuilderMapper.Get(request.Connection?.GetType())?.StatementBuilder ?? new SqlDbStatementBuilder()); if (statementBuilder is SqlDbStatementBuilder) { var sqlStatementBuilder = (SqlDbStatementBuilder)statementBuilder; if (isPrimaryIdentity == false) { isPrimaryIdentity = PrimaryKeyIdentityCache.Get <TEntity>(request.Connection.ConnectionString, Command.InlineMerge); } commandText = sqlStatementBuilder.CreateInlineMerge(queryBuilder: new QueryBuilder <TEntity>(), fields: request.Fields, qualifiers: request.Qualifiers, overrideIgnore: request.OverrideIgnore, isPrimaryIdentity: isPrimaryIdentity); } else { commandText = statementBuilder.CreateInlineMerge(queryBuilder: new QueryBuilder <TEntity>(), fields: request.Fields, qualifiers: request.Qualifiers, overrideIgnore: request.OverrideIgnore); } m_cache.TryAdd(request, commandText); } return(commandText); }
/// <summary> /// Initializes all necessary settings for SqLite. /// </summary> public static void Initialize() { // Skip if already initialized if (IsInitialized == true) { return; } #region SDS // Map the DbSetting DbSettingMapper.Add(typeof(SQLiteConnection), new SqLiteDbSetting(true), true); // Map the DbHelper DbHelperMapper.Add(typeof(SQLiteConnection), new SqLiteDbHelper(new SdsSqLiteDbTypeNameToClientTypeResolver()), true); // Map the Statement Builder StatementBuilderMapper.Add(typeof(SQLiteConnection), new SqLiteStatementBuilder(DbSettingMapper.Get(typeof(SQLiteConnection)), new SqLiteConvertFieldResolver(), new ClientTypeToAverageableClientTypeResolver()), true); #endregion #region MDS // Map the DbSetting DbSettingMapper.Add(typeof(SqliteConnection), new SqLiteDbSetting(false), true); // Map the DbHelper DbHelperMapper.Add(typeof(SqliteConnection), new SqLiteDbHelper(new MdsSqLiteDbTypeNameToClientTypeResolver()), true); // Map the Statement Builder StatementBuilderMapper.Add(typeof(SqliteConnection), new SqLiteStatementBuilder(DbSettingMapper.Get(typeof(SqliteConnection)), new SqLiteConvertFieldResolver(), new ClientTypeToAverageableClientTypeResolver()), true); #endregion // Set the flag IsInitialized = true; }
/// <summary> /// Initializes all necessary settings for SqLite. /// </summary> public static void Initialize() { // Skip if already initialized if (IsInitialized == true) { return; } // Map the DbSetting var mdsDbSetting = new SqLiteDbSetting(false); DbSettingMapper.Add <SqliteConnection>(mdsDbSetting, true); // Map the DbHelper DbHelperMapper.Add <SqliteConnection>(new SqLiteDbHelper(mdsDbSetting, new MdsSqLiteDbTypeNameToClientTypeResolver()), true); // Map the Statement Builder StatementBuilderMapper.Add <SqliteConnection>(new SqLiteStatementBuilder(mdsDbSetting, new SqLiteConvertFieldResolver(), new ClientTypeToAverageableClientTypeResolver()), true); // Set the flag IsInitialized = true; }