Пример #1
0
        /// <summary>
        /// データベースに接続する
        /// </summary>
        /// <param name="dbms">DBMSの種別</param>
        /// <param name="connStr">接続文字列</param>
        /// <param name="dbParams">設定情報</param>
        public Db(SqlBuilder.DbmsType dbms
                  , string connStr
                  , DbParameters dbParams = null)
        {
            _dbms = dbms;

            _connStr = connStr;
            if (dbParams == null)
            {
                _params = new DbParameters();
            }
            else
            {
                _params = (DbParameters)dbParams.Clone();
            }

            //プールするDB接続を用意する
            _connections = new List <DbConn>();
            for (int i = 0; i <= _params.ConnectionPool; i++)
            {
                _connections.Add(this.CreateDbConn());
            }

            //キャッシュテーブルの作成
            if (_params.Cache == DbParameters.CacheType.Null)
            {
                _aResultsCache = new NullResultsCache();
            }
            else if (_params.Cache == DbParameters.CacheType.LRU)
            {
                _aResultsCache = new LruResultsCache(_params.CacheSize);
            }
            else if (_params.Cache == DbParameters.CacheType.MarkovLRU)
            {
                _aResultsCache = new MarkovResultsCache(
                    new LruResultsCache(_params.CacheSize),
                    this);
            }
            else
            {
                throw new InvalidEnumArgumentException("Undefined CacheType is used");
            }

            //キャスターの生成
            _aCaster = this.CreateCaster();
            //SqlPodファクトリの生成
            _aSqlPodFactory = new SqlPodFactory(_params.SqlPodsDir, _dbms);
            //テーブル情報の生成
            _aTableInfoSet = new TableInfoSet(this);
            //レコードとテーブルのマッピング情報の生成
            _aRecordViewTableMapFactory = new RecordViewTableMapFactory(this);

            //ロックマネージャの生成
            //SQLiteの場合は、必ずSqliteLockManagerを使うこと
            if (_dbms == SqlBuilder.DbmsType.Sqlite)
            {
                _aLockManager = new SqliteLockManager();
            }
            else if (_params.LockData == DbParameters.LockDataType.Memory)
            {
                _aLockManager = new MemLockManager(_aRecordViewTableMapFactory, _aCaster);
            }
            else if (_params.LockData == DbParameters.LockDataType.Db)
            {
                _aLockManager = new DbLockManager(_aRecordViewTableMapFactory, this);
            }
            else if (_params.LockData == DbParameters.LockDataType.Sqlite)
            {
                _aLockManager = new SqliteLockManager();
            }
            else if (_params.LockData == DbParameters.LockDataType.Null)
            {
                _aLockManager = new NullLockManager();
            }
            else
            {
                throw new InvalidEnumArgumentException("Undefined LockDataType is used");
            }

            //SQL文発行ログの出力メソッドの作成
            if (_params.Logger == DbParameters.LoggerType.Null)
            {
                _aLogger = new NullLogger();
            }
            else if (_params.Logger == DbParameters.LoggerType.WindowsEventLog)
            {
                _aLogger = new WindowsEventLogger();
            }
            else if (_params.Logger == DbParameters.LoggerType.Console)
            {
                _aLogger = new ConsoleLogger();
            }
            else
            {
                throw new InvalidEnumArgumentException("Undefined LoggerType is used");
            }
        }
Пример #2
0
 public SqlMaker(RecordViewTableMapFactory aRecordViewTableMapFactory
                 , SqlPodFactory aSqlPodFactory)
 {
     _aRecordViewTableMapFactory = aRecordViewTableMapFactory;
     _aSqlPodFactory             = aSqlPodFactory;
 }