Search in sources :

Example 1 with GeneratorJdbc

use of ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc in project ili2db by claeis.

the class FgdbSequenceBasedIdGen method initDbDefs.

@Override
public void initDbDefs(ch.ehi.sqlgen.generator.Generator gen) {
    String sqlName = SQL_ILI2DB_SEQ_NAME;
    if (schema != null) {
        sqlName = schema + "." + sqlName;
    }
    String stmt = "CREATE SEQUENCE " + sqlName + ";";
    if (gen instanceof GeneratorJdbc) {
        ((GeneratorJdbc) gen).addCreateLine(((GeneratorJdbc) gen).new Stmt(stmt));
        ((GeneratorJdbc) gen).addDropLine(((GeneratorJdbc) gen).new Stmt("DROP SEQUENCE " + sqlName + ";"));
    }
    try {
        if (sequenceExists(new DbTableName(schema, sqlName))) {
            return;
        }
    } catch (IOException e) {
        throw new IllegalStateException(e);
    }
    EhiLogger.traceBackendCmd(stmt);
    java.sql.PreparedStatement updstmt = null;
    try {
        updstmt = conn.prepareStatement(stmt);
        updstmt.execute();
    } catch (java.sql.SQLException ex) {
        EhiLogger.logError("failed to create sequence " + sqlName, ex);
    } finally {
        if (updstmt != null) {
            try {
                updstmt.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        }
    }
}
Also used : GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) IOException(java.io.IOException) DbTableName(ch.ehi.sqlgen.repository.DbTableName) Stmt(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc.Stmt)

Example 2 with GeneratorJdbc

use of ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc in project ili2db by claeis.

the class GpkgSequenceBasedIdGen method initDbDefs.

@Override
public void initDbDefs(ch.ehi.sqlgen.generator.Generator gen) {
    String sqlName = SQL_ILI2DB_SEQ_NAME;
    if (schema != null) {
        sqlName = schema + "." + sqlName;
    }
    String stmt = "CREATE SEQUENCE " + sqlName + ";";
    if (gen instanceof GeneratorJdbc) {
        ((GeneratorJdbc) gen).addCreateLine(((GeneratorJdbc) gen).new Stmt(stmt));
        ((GeneratorJdbc) gen).addDropLine(((GeneratorJdbc) gen).new Stmt("DROP SEQUENCE " + sqlName + ";"));
    }
    try {
        if (sequenceExists(new DbTableName(schema, sqlName))) {
            return;
        }
    } catch (IOException e) {
        throw new IllegalStateException(e);
    }
    EhiLogger.traceBackendCmd(stmt);
    java.sql.PreparedStatement updstmt = null;
    try {
        updstmt = conn.prepareStatement(stmt);
        updstmt.execute();
    } catch (java.sql.SQLException ex) {
        EhiLogger.logError("failed to create sequence " + sqlName, ex);
    } finally {
        if (updstmt != null) {
            try {
                updstmt.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        }
    }
}
Also used : GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) IOException(java.io.IOException) DbTableName(ch.ehi.sqlgen.repository.DbTableName) Stmt(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc.Stmt)

Example 3 with GeneratorJdbc

use of ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc in project ili2db by claeis.

the class PgSequenceBasedIdGen method initDbDefs.

@Override
public void initDbDefs(ch.ehi.sqlgen.generator.Generator gen) {
    DbTableName sqlName = new DbTableName(schema, SQL_ILI2DB_SEQ_NAME);
    String stmt = "CREATE SEQUENCE " + sqlName.getQName();
    if (minValue != null) {
        stmt = stmt + " MINVALUE " + minValue;
    }
    if (maxValue != null) {
        stmt = stmt + " MAXVALUE " + maxValue;
    }
    stmt = stmt + ";";
    if (gen instanceof GeneratorJdbc) {
        ((GeneratorJdbc) gen).addCreateLine(((GeneratorJdbc) gen).new Stmt(stmt));
        ((GeneratorJdbc) gen).addDropLine(((GeneratorJdbc) gen).new Stmt("DROP SEQUENCE " + sqlName.getQName() + ";"));
    }
    if (DbUtility.sequenceExists(conn, sqlName)) {
        return;
    }
    EhiLogger.traceBackendCmd(stmt);
    java.sql.PreparedStatement updstmt = null;
    try {
        updstmt = conn.prepareStatement(stmt);
        updstmt.execute();
    } catch (java.sql.SQLException ex) {
        EhiLogger.logError("failed to create sequence " + sqlName.getQName(), ex);
    } finally {
        if (updstmt != null) {
            try {
                updstmt.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        }
    }
}
Also used : GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) DbTableName(ch.ehi.sqlgen.repository.DbTableName)

Example 4 with GeneratorJdbc

use of ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc in project ili2db by claeis.

the class MsSqlSequenceBasedIdGen method initDbDefs.

@Override
public void initDbDefs(Generator gen) {
    DbTableName sqlName = new DbTableName(schema, SQL_ILI2DB_SEQ_NAME);
    String stmt = "CREATE SEQUENCE " + sqlName.getQName() + " START WITH " + startWith;
    if (minValue != null) {
        stmt = stmt + " MINVALUE " + minValue;
    }
    if (maxValue != null) {
        stmt = stmt + " MAXVALUE " + maxValue;
    }
    stmt = stmt + ";";
    if (gen instanceof GeneratorJdbc) {
        ((GeneratorJdbc) gen).addCreateLine(((GeneratorJdbc) gen).new Stmt(stmt));
        ((GeneratorJdbc) gen).addDropLine(((GeneratorJdbc) gen).new Stmt("DROP SEQUENCE " + sqlName.getQName() + ";"));
    }
    // Check if a sequence exists (PLSQL)
    String seqExist = "IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'" + sqlName.getQName() + "') AND type = 'SO')\r\n" + "begin\r\n" + stmt + "\r\nend";
    stmt = seqExist;
    EhiLogger.traceBackendCmd(stmt);
    java.sql.PreparedStatement updstmt = null;
    try {
        updstmt = conn.prepareStatement(stmt);
        updstmt.execute();
    } catch (java.sql.SQLException ex) {
        EhiLogger.logError("failed to create sequence " + sqlName.getQName(), ex);
    } finally {
        if (updstmt != null) {
            try {
                updstmt.close();
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        }
    }
}
Also used : GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) DbTableName(ch.ehi.sqlgen.repository.DbTableName)

Example 5 with GeneratorJdbc

use of ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc in project ili2db by claeis.

the class Ili2db method runSchemaImport.

public static void runSchemaImport(Config config, String appHome) throws Ili2dbException {
    ch.ehi.basics.logging.FileListener logfile = null;
    if (config.getLogfile() != null) {
        logfile = new FileLogger(new java.io.File(config.getLogfile()));
        EhiLogger.getInstance().addListener(logfile);
    }
    StdLogger logStderr = new StdLogger(config.getLogfile());
    EhiLogger.getInstance().addListener(logStderr);
    EhiLogger.getInstance().removeListener(StdListener.getInstance());
    try {
        boolean connectionFromExtern = config.getJdbcConnection() != null;
        logGeneralInfo(config);
        Ili2dbLibraryInit ao = null;
        try {
            ao = getInitStrategy(config);
            ao.init();
            ch.interlis.ili2c.config.Configuration modelv = new ch.interlis.ili2c.config.Configuration();
            String xtffile = config.getXtffile();
            String ilifile = null;
            if (xtffile != null && xtffile.endsWith(".ili")) {
                ilifile = xtffile;
                modelv.addFileEntry(new ch.interlis.ili2c.config.FileEntry(ilifile, ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE));
            }
            String models = config.getModels();
            if (models != null) {
                String[] modelnames = models.split(";");
                for (int modeli = 0; modeli < modelnames.length; modeli++) {
                    String m = modelnames[modeli];
                    if (m != null) {
                        if (m.equals(XTF)) {
                        // ignore it
                        } else {
                            modelv.addFileEntry(new ch.interlis.ili2c.config.FileEntry(m, ch.interlis.ili2c.config.FileEntryKind.ILIMODELFILE));
                        }
                    }
                }
            }
            if (modelv.getSizeFileEntry() == 0) {
                throw new Ili2dbException("no models given");
            }
            String dburl = config.getDburl();
            String dbusr = config.getDbusr();
            String dbpwd = config.getDbpwd();
            if (!connectionFromExtern && dburl == null) {
                throw new Ili2dbException("no dburl given");
            }
            if (dbusr == null) {
                // EhiLogger.logError("no dbusr given");
                // return;
                dbusr = "";
            }
            if (dbpwd == null) {
                // EhiLogger.logError("no dbpwd given");
                // return;
                dbpwd = "";
            }
            String dbschema = config.getDbschema();
            if (dbschema != null) {
                EhiLogger.logState("dbschema <" + dbschema + ">");
            }
            String geometryConverter = config.getGeometryConverter();
            if (geometryConverter == null) {
                throw new Ili2dbException("no geoemtry converter given");
            }
            String ddlGenerator = config.getDdlGenerator();
            if (ddlGenerator == null) {
                throw new Ili2dbException("no DDL generator given");
            }
            String idGenerator = config.getIdGenerator();
            if (idGenerator == null) {
                throw new Ili2dbException("no ID generator given");
            }
            if (!connectionFromExtern) {
                String jdbcDriver = config.getJdbcDriver();
                if (jdbcDriver == null) {
                    throw new Ili2dbException("no JDBC driver given");
                }
                try {
                    Class.forName(jdbcDriver);
                } catch (Exception ex) {
                    throw new Ili2dbException("failed to load JDBC driver", ex);
                }
            }
            CustomMapping customMapping = getCustomMappingStrategy(config);
            // open db connection
            Connection conn = null;
            String url = dburl;
            try {
                if (connectionFromExtern) {
                    conn = config.getJdbcConnection();
                } else {
                    conn = connect(url, dbusr, dbpwd, config, customMapping);
                }
                customMapping.postConnect(conn, config);
                logDBVersion(conn);
                if (!connectionFromExtern) {
                    // switch off auto-commit
                    conn.setAutoCommit(false);
                }
            } catch (SQLException ex) {
                throw new Ili2dbException(ex);
            }
            // run pre-script
            if (config.getPreScript() != null) {
                try {
                    EhiLogger.logState("run schemaImport pre-script...");
                    DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPreScript()));
                } catch (FileNotFoundException e) {
                    throw new Ili2dbException("schemaImport pre-script statements failed", e);
                }
            }
            // setup ilidirs+pathmap for ili2c
            setupIli2cPathmap(config, appHome, ilifile, conn);
            Ili2cMetaAttrs ili2cMetaAttrs = new Ili2cMetaAttrs();
            setupIli2cMetaAttrs(ili2cMetaAttrs, config, modelv);
            // compile required ili files
            EhiLogger.logState("compile models...");
            TransferDescription td;
            modelv.setAutoCompleteModelList(true);
            modelv.setGenerateWarnings(false);
            td = ch.interlis.ili2c.Main.runCompiler(modelv, config, ili2cMetaAttrs);
            if (td == null) {
                throw new Ili2dbException("compiler failed");
            }
            // an INTERLIS 1 model?
            if (td.getIli1Format() != null) {
                config.setItfTransferfile(true);
            }
            Generator gen = null;
            try {
                gen = (Generator) Class.forName(ddlGenerator).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create DDL generator", ex);
            }
            // create db schema
            if (config.getDbschema() != null) {
                if (!DbUtility.schemaExists(conn, config.getDbschema())) {
                    DbUtility.createSchema(conn, config.getDbschema());
                }
            }
            DbIdGen idGen = null;
            try {
                idGen = (DbIdGen) Class.forName(idGenerator).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create ID generator", ex);
            }
            idGen.init(config.getDbschema(), config);
            // read mapping file
            NameMapping mapping = new NameMapping(config);
            if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.CLASSNAME_TAB))) {
                // read mapping from db
                mapping.readTableMappingTable(conn, config.getDbschema());
            }
            if (DbUtility.tableExists(conn, new DbTableName(config.getDbschema(), DbNames.ATTRNAME_TAB))) {
                // read mapping from db
                mapping.readAttrMappingTable(conn, config.getDbschema());
            }
            TrafoConfig trafoConfig = new TrafoConfig();
            trafoConfig.readTrafoConfig(conn, config.getDbschema());
            ModelElementSelector ms = new ModelElementSelector();
            ArrayList<String> modelNames = new ArrayList<String>();
            if (models != null) {
                String[] modelnames = models.split(";");
                for (int modeli = 0; modeli < modelnames.length; modeli++) {
                    String m = modelnames[modeli];
                    if (m != null) {
                        if (m.equals(XTF)) {
                        // ignore it
                        } else {
                            modelNames.add(m);
                        }
                    }
                }
            }
            // use models explicitly given by user (or last model of given ili-file)
            java.util.List<Element> eles = ms.getModelElements(modelNames, td, td.getIli1Format() != null && config.getDoItfLineTables(), Config.CREATE_ENUM_DEFS_MULTI.equals(config.getCreateEnumDefs()), config);
            Viewable2TableMapping class2wrapper = Viewable2TableMapper.getClass2TableMapping(config, trafoConfig, eles, mapping);
            SqlColumnConverter geomConverter = null;
            try {
                geomConverter = (SqlColumnConverter) Class.forName(geometryConverter).newInstance();
            } catch (Exception ex) {
                throw new Ili2dbException("failed to load/create geometry converter", ex);
            }
            geomConverter.setup(conn, config);
            if (config.getDefaultSrsCode() != null && config.getDefaultSrsAuthority() != null) {
                try {
                    if (geomConverter.getSrsid(config.getDefaultSrsAuthority(), config.getDefaultSrsCode(), conn) == null) {
                        throw new Ili2dbException(config.getDefaultSrsAuthority() + "/" + config.getDefaultSrsCode() + " does not exist");
                    }
                } catch (ConverterException ex) {
                    throw new Ili2dbException("failed to query existence of SRS", ex);
                }
            }
            // create table structure
            EhiLogger.logState("create table structure...");
            try {
                TransferFromIli trsfFromIli = new TransferFromIli();
                // map ili-classes to sql-tables
                // TODO move default SRS to config
                DbSchema schema;
                try {
                    schema = trsfFromIli.doit(td, eles, mapping, config, idGen, trafoConfig, class2wrapper, customMapping);
                } catch (Ili2dbException e) {
                    throw new Ili2dbException("mapping of ili-classes to sql-tables failed", e);
                }
                if (schema == null) {
                    return;
                }
                if (!(conn instanceof GeodbConnection)) {
                    trsfFromIli.addBasketsTable(schema);
                    trsfFromIli.addImportsTable(schema);
                    TransferFromIli.addInheritanceTable(schema, Integer.parseInt(config.getMaxSqlNameLength()));
                    TransferFromIli.addSettingsTable(schema);
                    TransferFromIli.addTrafoConfigTable(schema);
                    TransferFromIli.addModelsTable(schema, config);
                    trsfFromIli.addEnumTable(schema);
                    TransferFromIli.addTableMappingTable(schema);
                    TransferFromIli.addAttrMappingTable(schema);
                    DbExtMetaInfo.addMetaInfoTables(schema);
                    idGen.addMappingTable(schema);
                    if (config.getCreateMetaInfo()) {
                        MetaAttrUtility.addMetaAttributesTable(schema);
                    }
                }
                // TODO create geodb domains
                if (conn instanceof GeodbConnection) {
                }
                GeneratorDriver drv = new GeneratorDriver(gen);
                idGen.initDb(conn, dbusr);
                idGen.initDbDefs(gen);
                drv.visitSchema(config, schema);
                // is a create script requested by user?
                String createscript = config.getCreatescript();
                if (createscript != null && (gen instanceof GeneratorJdbc)) {
                    writeScript(createscript, ((GeneratorJdbc) gen).iteratorCreateLines());
                }
                // is a drop script requested by user?
                String dropscript = config.getDropscript();
                if (dropscript != null && (gen instanceof GeneratorJdbc)) {
                    writeScript(dropscript, ((GeneratorJdbc) gen).iteratorDropLines());
                }
                if (!(conn instanceof GeodbConnection)) {
                    // update mapping table
                    mapping.updateTableMappingTable(conn, config.getDbschema());
                    mapping.updateAttrMappingTable(conn, config.getDbschema());
                    trafoConfig.updateTrafoConfig(conn, config.getDbschema());
                    // update inheritance table
                    trsfFromIli.updateInheritanceTable(conn, config.getDbschema());
                    // update enum table
                    trsfFromIli.updateEnumTable(conn);
                    trsfFromIli.updateMetaInfoTables(conn);
                    TransferFromIli.addModels(conn, td, config.getDbschema());
                    if (!config.isConfigReadFromDb()) {
                        TransferFromIli.updateSettings(conn, config, config.getDbschema());
                    }
                    // import meta-attributes from .toml file
                    if (config.getIliMetaAttrsFile() != null) {
                        if (config.getCreateMetaInfo()) {
                            try {
                                EhiLogger.logState("run import meta-attributes from toml file");
                                MetaAttrUtility.addMetaAttrsFromToml(td, new java.io.FileReader(config.getIliMetaAttrsFile()));
                            } catch (FileNotFoundException e) {
                                throw new Ili2dbException("import meta-attributes failed", e);
                            }
                        } else {
                            throw new Ili2dbException("import meta-attributes requires --createMetaInfo option");
                        }
                    }
                    if (config.getCreateMetaInfo()) {
                        // update meta-attributes table
                        MetaAttrUtility.updateMetaAttributesTable(conn, config.getDbschema(), td);
                        // set elements' meta-attributes
                        MetaAttrUtility.addMetaAttrsFromDb(td, conn, config.getDbschema());
                    }
                }
                // run post-script
                if (config.getPostScript() != null) {
                    try {
                        EhiLogger.logState("run schemaImport post-script...");
                        DbUtility.executeSqlScript(conn, new java.io.FileReader(config.getPostScript()));
                    } catch (FileNotFoundException e) {
                        throw new Ili2dbException("schemaImport post-script statements failed", e);
                    }
                }
                // }
                if (!connectionFromExtern) {
                    try {
                        conn.commit();
                    } catch (SQLException e) {
                        throw new Ili2dbException("failed to commit", e);
                    }
                }
            } catch (java.io.IOException ex) {
                throw new Ili2dbException(ex);
            }
            try {
                if (!connectionFromExtern) {
                    if (conn != null) {
                        try {
                            conn.close();
                        } finally {
                            conn = null;
                            config.setJdbcConnection(null);
                        }
                    }
                }
                EhiLogger.logState("...done");
            } catch (java.sql.SQLException ex) {
                EhiLogger.logError(ex);
            }
        } finally {
            ao.end();
        }
    } catch (Ili2dbException ex) {
        if (logfile != null) {
            logfile.logEvent(new StdLogEvent(LogEvent.ERROR, null, ex, null));
        }
        throw ex;
    } catch (java.lang.RuntimeException ex) {
        if (logfile != null) {
            logfile.logEvent(new StdLogEvent(LogEvent.ERROR, null, ex, null));
        }
        throw ex;
    } finally {
        if (logfile != null) {
            EhiLogger.getInstance().removeListener(logfile);
            logfile.close();
            logfile = null;
        }
        if (logStderr != null) {
            EhiLogger.getInstance().addListener(StdListener.getInstance());
            EhiLogger.getInstance().removeListener(logStderr);
        }
    }
}
Also used : ConverterException(ch.ehi.ili2db.converter.ConverterException) NameMapping(ch.ehi.ili2db.mapping.NameMapping) Configuration(ch.interlis.ili2c.config.Configuration) FileNotFoundException(java.io.FileNotFoundException) ArrayList(java.util.ArrayList) Viewable2TableMapping(ch.ehi.ili2db.mapping.Viewable2TableMapping) GeneratorDriver(ch.ehi.sqlgen.generator.GeneratorDriver) TrafoConfig(ch.ehi.ili2db.mapping.TrafoConfig) TransferDescription(ch.interlis.ili2c.metamodel.TransferDescription) FileLogger(ch.interlis.iox_j.logging.FileLogger) SqlColumnConverter(ch.ehi.ili2db.converter.SqlColumnConverter) DbTableName(ch.ehi.sqlgen.repository.DbTableName) Generator(ch.ehi.sqlgen.generator.Generator) SQLException(java.sql.SQLException) StdLogEvent(ch.ehi.basics.logging.StdLogEvent) Element(ch.interlis.ili2c.metamodel.Element) CustomMapping(ch.ehi.ili2db.fromili.CustomMapping) SQLException(java.sql.SQLException) GeneratorJdbc(ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc) StdLogger(ch.interlis.iox_j.logging.StdLogger) TransferFromIli(ch.ehi.ili2db.fromili.TransferFromIli) Ili2cMetaAttrs(ch.interlis.ili2c.metamodel.Ili2cMetaAttrs) DbSchema(ch.ehi.sqlgen.repository.DbSchema) Connection(java.sql.Connection) IOException(java.io.IOException) IoxException(ch.interlis.iox.IoxException) FileNotFoundException(java.io.FileNotFoundException) SQLException(java.sql.SQLException) ConverterException(ch.ehi.ili2db.converter.ConverterException) IOException(java.io.IOException) Configuration(ch.interlis.ili2c.config.Configuration) ModelElementSelector(ch.ehi.ili2db.fromili.ModelElementSelector)

Aggregations

GeneratorJdbc (ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc)6 DbTableName (ch.ehi.sqlgen.repository.DbTableName)6 IOException (java.io.IOException)4 StdLogEvent (ch.ehi.basics.logging.StdLogEvent)2 ConverterException (ch.ehi.ili2db.converter.ConverterException)2 SqlColumnConverter (ch.ehi.ili2db.converter.SqlColumnConverter)2 CustomMapping (ch.ehi.ili2db.fromili.CustomMapping)2 ModelElementSelector (ch.ehi.ili2db.fromili.ModelElementSelector)2 TransferFromIli (ch.ehi.ili2db.fromili.TransferFromIli)2 NameMapping (ch.ehi.ili2db.mapping.NameMapping)2 TrafoConfig (ch.ehi.ili2db.mapping.TrafoConfig)2 Viewable2TableMapping (ch.ehi.ili2db.mapping.Viewable2TableMapping)2 Generator (ch.ehi.sqlgen.generator.Generator)2 GeneratorDriver (ch.ehi.sqlgen.generator.GeneratorDriver)2 Stmt (ch.ehi.sqlgen.generator_impl.jdbc.GeneratorJdbc.Stmt)2 DbSchema (ch.ehi.sqlgen.repository.DbSchema)2 Configuration (ch.interlis.ili2c.config.Configuration)2 Element (ch.interlis.ili2c.metamodel.Element)2 Ili2cMetaAttrs (ch.interlis.ili2c.metamodel.Ili2cMetaAttrs)2 TransferDescription (ch.interlis.ili2c.metamodel.TransferDescription)2