public CSVOpts map(Integer col, Class<?> type) { mappings.add(new Pair<Object,Class<?>>(col, type)); return this; }
@Override public void close() { dataset.close(Pair.of(layer,dataSource)); } }
public CSVOpts map(String col, Class<?> type) { mappings.add(new Pair<Object,Class<?>>(col, type)); return this; }
@Override public List<Pair<String, Class>> getColumnInfo(String table) throws IOException { String sql = String.format(Locale.ROOT,"SELECT * FROM %s LIMIT 1", table); JDBCResults results = (JDBCResults) query(sql); try { List<Pair<String, Class>> info = new ArrayList<Pair<String, Class>>(); try { ResultSetMetaData rsmd = results.results.getMetaData(); for (int i = 0; i < rsmd.getColumnCount(); i++) { info.add(Pair.of( rsmd.getColumnName(i + 1), (Class) dbTypes.fromSQL(rsmd.getColumnType(i + 1)) )); } } catch (SQLException ex) { throw new IOException(ex); } return info; } finally { results.close(); } }
@Override protected Pair<Version, Version> doRun(Connection cx) throws Exception { ResultSet rs = open(open(cx.createStatement()).executeQuery("SELECT postgis_lib_version()")); rs.next(); Version postgis = new Version(rs.getString(1)); DatabaseMetaData md = cx.getMetaData(); Version postgres = new Version(String.format(Locale.ROOT, "%s.%s", md.getDatabaseMajorVersion(), md.getDatabaseMinorVersion())); return new Pair<Version,Version>(postgis, postgres); } });
Pair<Layer,DataSource> open() throws IOException { DataSource ds = workspace.open(); return Pair.of(ds.GetLayer(0), ds); }
protected void encode(Geometry geo, Object obj) { int srid = srid(geo, obj); if (prepared) { sql.add("ST_GeomFromText(?,?)"); args.add(new Pair<Object,Integer>(geo.toText(), Types.VARCHAR)); args.add(new Pair<Object,Integer>(srid, Types.INTEGER)); } else { sql.add("ST_GeomFromText(").str(geo.toText()).add(",").add(srid).add(")"); } }
@Override protected Object doRun(Connection cx) throws Exception { cx.setAutoCommit(false); SQL sql = new SQL("DROP TABLE ").name(schema().orElse(null), name); LOG.debug(sql.toString()); Statement st = open(cx.createStatement()); st.execute(sql.toString()); if (!info.isAtLeastVersion2()) { //de-registry geometry columns sql = new SQL("DELETE FROM geometry_columns ") .add(" WHERE f_table_schema = ? ") .add(" AND f_table_name = ?"); List<Pair<Object,Integer>> values = new ArrayList<Pair<Object,Integer>>(); values.add(new Pair(schema().orElse("public"), Types.VARCHAR)); values.add(new Pair(name, Types.VARCHAR)); logQuery(sql, values); open(prepareStatement(sql, values, cx)).execute(); } cx.commit(); return null; } });
gcols.add(new Pair(fld, srid)); sql.add("Geometry"); values.add(new Pair("", Types.VARCHAR)); values.add(new Pair(schema().orElse("public"), Types.VARCHAR)); values.add(new Pair(schema.name(), Types.VARCHAR)); values.add(new Pair(fld.name(), Types.VARCHAR)); values.add(new Pair(2, Types.INTEGER)); values.add(new Pair(p.second, Types.INTEGER)); values.add(new Pair(Geom.Type.from(fld.type()).getName(), Types.VARCHAR));
@Override protected Boolean doRun(Connection cx) throws Exception { Schema schema = schema(); List<Pair<Object,Integer>> values = new ArrayList<Pair<Object,Integer>>(); SQL sql = new SQL("UPDATE ").name(table.schema(), table.name()).add(" SET "); for (String col : changed.keySet()) { sql.name(col).add(" = ?,"); Field fld = schema.field(col); values.add(new Pair(f.get(col), (Integer) fld.property("sqlType", Integer.class))); } sql.trim(1); sql.add(" WHERE "); List<PrimaryKeyColumn> pkcols = getTable().primaryKey().getColumns(); for (PrimaryKeyColumn pkcol : pkcols) { String col = pkcol.getName(); sql.name(col).add(" = ?,"); Field fld = schema.field(col); values.add(new Pair(f.get(col), fld.property("sqlType", Integer.class))); } sql.trim(1); pg.logQuery(sql, values); PreparedStatement ps = open(cx.prepareStatement(sql.toString())); for (int i = 0; i < values.size(); i++) { Pair<Object,Integer> p = values.get(i); ps.setObject(i+1, p.first, p.second); } return ps.execute(); } }, cx);