public override string GetTablesSql()
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("OWNER AS {0}", SqlColName_TableSchema);
            sql.Select("TABLE_NAME AS {0}", SqlColName_TableName);
            sql.From("ALL_TABLES");
            if (!String.IsNullOrEmpty(Importer.FilterSchema))
            {
                sql.WhereAnd("OWNER LIKE '{0}' ESCAPE '{1}'", Importer.FilterSchema, Importer.FilterEscape);
            }
            if (Importer.FilterTables.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("(");
                for (int i = 0; i < Importer.FilterTables.Count; i++)
                {
                    sb.AppendFormat("{0}TABLE_NAME LIKE '{1}' ESCAPE '{2}'",
                                    i == 0 ? "" : " OR ",
                                    Importer.FilterTables[i],
                                    Importer.FilterEscape);
                }
                sb.Append(")");
                sql.WhereAnd(sb.ToString());
            }
            return(sql.ToString());
        }
        public override string GetUniqueKeysSql(MetaInfoTable table)
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("C.OWNER AS {0}", SqlColName_Schema);
            sql.Select("C.CONSTRAINT_NAME AS {0}", SqlColName_ConstraintName);
            sql.Select("CC.POSITION AS {0}", SqlColName_ColumnPosition);
            sql.Select("C.INDEX_OWNER AS {0}", SqlColName_IndexOwner);
            sql.Select("C.INDEX_NAME AS {0}", SqlColName_IndexName);
            sql.Select("CC.COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.From("ALL_CONSTRAINTS C");
            sql.From("INNER JOIN ALL_CONS_COLUMNS CC ON C.OWNER = CC.OWNER AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME");
            sql.WhereAnd("C.OWNER='{0}'", table.PersistentSchema);
            sql.WhereAnd("C.TABLE_NAME='{0}'", table.PersistentName);
            sql.WhereAnd("C.CONSTRAINT_TYPE='U'");
            sql.UnionAll();
            sql.Select("I.OWNER AS {0}", SqlColName_Schema);
            sql.Select("I.INDEX_NAME AS {0}", SqlColName_ConstraintName);
            sql.Select("IC.COLUMN_POSITION AS {0}", SqlColName_ColumnPosition);
            sql.Select("I.OWNER AS {0}", SqlColName_IndexOwner);
            sql.Select("I.INDEX_NAME AS {0}", SqlColName_IndexName);
            sql.Select("IC.COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.From("ALL_INDEXES I");
            sql.From("INNER JOIN ALL_IND_COLUMNS IC ON I.OWNER = IC.INDEX_OWNER AND I.INDEX_NAME = IC.INDEX_NAME");
            sql.From("LEFT OUTER JOIN ALL_CONSTRAINTS C ON I.OWNER = C.OWNER AND I.INDEX_NAME = C.INDEX_NAME");
            sql.WhereAnd("I.OWNER='{0}'", table.PersistentSchema);
            sql.WhereAnd("I.TABLE_NAME='{0}'", table.PersistentName);
            sql.WhereAnd("I.UNIQUENESS = 'UNIQUE'");
            sql.WhereAnd("C.INDEX_NAME IS NULL");
            sql.OrderBy("1 ASC, 2 ASC, 3 ASC");
            return(sql.ToString());
        }
        public override string GetPrimaryKeySql(MetaInfoTable table)
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("C.CONSTRAINT_NAME AS {0}", SqlColName_ConstraintName);
            sql.Select("CC.COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.Select("CC.POSITION AS {0}", SqlColName_ColumnPosition);
            sql.From("ALL_CONSTRAINTS C");
            sql.From("INNER JOIN ALL_CONS_COLUMNS CC ON C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME");
            sql.WhereAnd("C.OWNER='{0}'", table.PersistentSchema);
            sql.WhereAnd("C.TABLE_NAME='{0}'", table.PersistentName);
            sql.WhereAnd("C.CONSTRAINT_TYPE='P'");
            sql.OrderBy("C.CONSTRAINT_NAME, CC.POSITION ASC");
            return(sql.ToString());
        }
        public override string GetColumnsSql(MetaInfoTable table)
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.Select("DATA_TYPE AS {0}", SqlColName_ColumnType);
            sql.Select("NVL(DATA_PRECISION, CHAR_LENGTH) AS {0}", SqlColName_ColumnTypeLength);
            sql.Select("NVL(DATA_SCALE, 0) AS {0}", SqlColName_ColumnTypePrecision);
            sql.Select("NULLABLE AS {0}", SqlColName_ColumnNullable);
            sql.Select("COLUMN_ID AS {0}", SqlColName_ColumnPosition);
            sql.From("ALL_TAB_COLUMNS");
            sql.WhereAnd("OWNER='{0}'", table.PersistentSchema);
            sql.WhereAnd("TABLE_NAME='{0}'", table.PersistentName);
            sql.OrderBy("COLUMN_ID ASC");
            return(sql.ToString());
        }
        public override string GetGeneratorsSql()
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("SEQUENCE_OWNER AS {0}", SqlColName_Schema);
            sql.Select("SEQUENCE_NAME AS {0}", SqlColName_Name);
            sql.Select("MIN_VALUE AS {0}", SqlColName_GeneratorMinValue);
            sql.Select("MAX_VALUE AS {0}", SqlColName_GeneratorMaxValue);
            sql.Select("INCREMENT_BY AS {0}", SqlColName_GeneratorIncrement);
            sql.Select("{0} AS {1}", (int)GeneratorType.Sequence, SqlColName_GeneratorType);
            sql.From("ALL_SEQUENCES");
            if (!String.IsNullOrEmpty(Importer.FilterSchema))
            {
                sql.WhereAnd("SEQUENCE_OWNER LIKE '{0}' ESCAPE '{1}'", Importer.FilterSchema, Importer.FilterEscape);
            }
            return(sql.ToString());
        }
        public override string GetIndexesSql()
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("I.OWNER AS {0}", SqlColName_IndexOwner);
            sql.Select("I.INDEX_NAME AS {0}", SqlColName_IndexName);
            sql.Select("IC.COLUMN_POSITION AS {0}", SqlColName_ColumnPosition);
            sql.Select("IC.COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.Select("I.TABLE_OWNER AS {0}", SqlColName_TableSchema);
            sql.Select("I.TABLE_NAME AS {0}", SqlColName_TableName);
            sql.Select("CASE I.UNIQUENESS WHEN 'UNIQUE' THEN 1 ELSE 0 END AS {0}", SqlColName_IsUnique);
            sql.From("ALL_INDEXES I");
            sql.From("INNER JOIN ALL_IND_COLUMNS IC ON I.OWNER = IC.INDEX_OWNER AND I.INDEX_NAME = IC.INDEX_NAME");
            if (!String.IsNullOrEmpty(Importer.FilterSchema))
            {
                sql.WhereAnd("I.TABLE_OWNER LIKE '{0}' ESCAPE '{1}'", Importer.FilterSchema, Importer.FilterEscape);
            }
            sql.WhereAnd("I.INDEX_NAME IS NOT NULL");
            sql.OrderBy("1 ASC, 2 ASC, 3 ASC");
            return(sql.ToString());
        }
        public override string GetForeignKeysSql(MetaInfoTable table)
        {
            ISqlStringBuilder sql = Importer.Genie.Lamp.GenieLampUtils.GetSqlStringBuilder();

            sql.Select("C.CONSTRAINT_NAME AS {0}", SqlColName_ConstraintName);
            sql.Select("C.OWNER AS {0}", SqlColName_FKTableSchema);
            sql.Select("C.TABLE_NAME AS {0}", SqlColName_FKTableName);
            sql.Select("CC.COLUMN_NAME AS {0}", SqlColName_ColumnName);
            sql.Select("CC.POSITION AS {0}", SqlColName_ColumnPosition);
            sql.Select("C2.OWNER AS {0}", SqlColName_FKParentTableSchema);
            sql.Select("C2.TABLE_NAME AS {0}", SqlColName_FKParentTableName);
            sql.Select("CC2.COLUMN_NAME AS {0}", SqlColName_FKParentColumnName);
            sql.From("ALL_CONSTRAINTS C");
            sql.From("INNER JOIN ALL_CONS_COLUMNS CC ON C.OWNER = CC.OWNER AND C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME");
            sql.From("INNER JOIN ALL_CONSTRAINTS C2 ON C.R_OWNER = C2.OWNER AND C.R_CONSTRAINT_NAME = C2.CONSTRAINT_NAME");
            sql.From("INNER JOIN ALL_CONS_COLUMNS CC2 ON C2.OWNER = CC2.OWNER AND C2.CONSTRAINT_NAME = CC2.CONSTRAINT_NAME AND CC.POSITION = CC2.POSITION");
            sql.WhereAnd("C.OWNER='{0}'", table.PersistentSchema);
            sql.WhereAnd("C.TABLE_NAME='{0}'", table.PersistentName);
            sql.WhereAnd("C.CONSTRAINT_TYPE='R'");
            sql.OrderBy("C.OWNER, C.TABLE_NAME, C.CONSTRAINT_NAME, CC.POSITION ASC");
            return(sql.ToString());
        }