/*
 * blancoDb
 * Copyright (C) 2004-2005 Yasuo Nakanishi
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.db.expander.table.gateway.sql;

import blanco.db.conf.BlancoDbDatabaseConnectionSettingDef;
import blanco.db.definition.TableGateway;
import blanco.ig.expander.Type;

/**
 * @author Yasuo Nakanishi
 */
public class SqlGeneratorFactory {

    /**
     * SqlGeneratorオブジェクトを作成します。 <br>
     * [blancoDbのソースコードを閲覧している人へ。]このメソッドは 接続以前に呼び出されるのでJDBCメタ情報が利用できない点に注意ください。
     * 
     * @param jdbc
     * @param option
     * @param rowType
     * @param gateway
     * @return
     */
    public SqlGenerator create(BlancoDbDatabaseConnectionSettingDef jdbc,
            Type rowType, TableGateway gateway) {
        SqlGenerator result = null;
        String driver = jdbc.getJdbcDriver();
        if (driver.equals("org.hsqldb.jdbcDriver")) {
            result = new HSqlDbSqlGenerator(rowType, gateway);
        } else if (driver
                .equals("com.microsoft.jdbc.sqlserver.SQLServerDriver")) {
            result = new SqlServerSqlGenerator(rowType, gateway);
        } else if (driver.equals("org.postgresql.Driver")) {
            result = new PostgreSqlSqlGenerator(rowType, gateway);
        } else if (driver.equals("oracle.jdbc.driver.OracleDriver")) {
            result = new OracleSqlGenerator(rowType, gateway);
        } else {
            // 未知のドライバです。デフォルトクラスで対応します。
            result = new DefaultSqlGenerator(rowType, gateway);
        }
        return result;
    }
}