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);
}
}
}
}
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);
}
}
}
}
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);
}
}
}
}
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);
}
}
}
}
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);
}
}
}
Aggregations