VirtualTable vt = new VirtualTable(name, sql, false); vt.addGeometryMetadatata(geomNames.get(i), types.get(i), srids.get(i)); vt.addParameter(p); vt.setEscapeSql(escapeSql); vt.setPrimaryKeyColumns(primaryKeys);
VirtualTable vt = (VirtualTable) source; writer.startNode("name"); writer.setValue(vt.getName()); writer.endNode(); writer.startNode("sql"); writer.setValue(vt.getSql()); writer.endNode(); writer.startNode("escapeSql"); writer.setValue(Boolean.toString(vt.isEscapeSql())); writer.endNode(); if (vt.getPrimaryKeyColumns() != null) { for (String pk : vt.getPrimaryKeyColumns()) { writer.startNode("keyColumn"); writer.setValue(pk); if (vt.getGeometries() != null) { for (String geom : vt.getGeometries()) { writer.startNode("geometry"); writer.startNode("name"); writer.endNode(); writer.startNode("type"); writer.setValue(Geometries.getForBinding(vt.getGeometryType(geom)).getName()); writer.endNode(); writer.startNode("srid"); writer.setValue(String.valueOf(vt.getNativeSrid(geom))); writer.endNode(); writer.endNode();
ft = jstore.getSchema(vt.getName()); jstore.createVirtualTable(new VirtualTable(temporaryName.getLocalPart(), vt)); return true; } else {
@Test public void testVirtualTableOrder() throws Exception { FeatureTypeInfo ft = persister.load( getClass() .getResourceAsStream( "/org/geoserver/config/virtualtable_order_error.xml"), FeatureTypeInfo.class); VirtualTable vtc = (VirtualTable) ft.getMetadata().get(FeatureTypeInfo.JDBC_VIRTUAL_TABLE); assertEquals(vtc.getSql(), "select * from table\n"); assertEquals(vtc.getName(), "sqlview"); }
new VirtualTable( VT_NAME, "select \"name\", \"pointProperty\" from \"pgeo\" where \"booleanProperty\" = %bool% and \"name\" = '%name%'"); vt.addParameter(new VirtualTableParameter("bool", "true")); vt.addParameter(new VirtualTableParameter("name", "name-f001")); vt.addGeometryMetadatata("pointProperty", Point.class, 4326); jds.createVirtualTable(vt); FeatureTypeInfo vft = cb.buildFeatureType(jds.getFeatureSource(vt.getName())); vft.getMetadata().put(FeatureTypeInfo.JDBC_VIRTUAL_TABLE, vt); cat.add(vft);
void setFeatureType(SimpleFeatureType ft, VirtualTable vt) { attributes.clear(); for (AttributeDescriptor ad : ft.getAttributeDescriptors()) { SQLViewAttribute at = new SQLViewAttribute(ad.getLocalName(), ad.getType().getBinding()); String attName = ad.getName().getLocalPart(); attributes.add(at); if (ad instanceof GeometryDescriptor) { GeometryDescriptor gd = (GeometryDescriptor) ad; if(gd.getUserData().get(JDBCDataStore.JDBC_NATIVE_SRID) != null) { at.setSrid((Integer) gd.getUserData().get(JDBCDataStore.JDBC_NATIVE_SRID)); } else if(gd.getCoordinateReferenceSystem() != null) { try { at.setSrid(CRS.lookupEpsgCode(gd.getCoordinateReferenceSystem(), false)); } catch(Exception e) { // it is ok, we're just trying to facilitate the user's life here } } if(vt != null && vt.getGeometries().contains(attName)) { at.setSrid(vt.getNativeSrid(attName)); at.setType(vt.getGeometryType(attName)); } } if(vt != null && vt.getPrimaryKeyColumns() != null && vt.getPrimaryKeyColumns().contains(attName)) { at.setPk(true); } } }
@Test public void testByCopyConstructor() { VirtualTable source = new VirtualTable("test", "select * from tables"); VirtualTable copy = ModificationProxyCloner.clone(source); assertNotSame(source, copy); assertEquals(source, copy); }
/** * Checks the view definition works as expected and returns the feature type guessed solely by * looking at the sql and the first row of its output * * @param newSchema * @throws IOException */ protected SimpleFeatureType testViewDefinition( VirtualTable virtualTable, boolean guessGeometrySrid) throws IOException { // check out if the view can be used JDBCDataStore ds = (JDBCDataStore) getCatalog().getDataStore(storeId).getDataStore(null); String vtName = null; try { // use a highly random name do { vtName = UUID.randomUUID().toString(); } while (Arrays.asList(ds.getTypeNames()).contains(vtName)); // try adding the vt and see if that works VirtualTable vt = new VirtualTable(vtName, virtualTable); // hide the primary key definitions or we'll loose some columns vt.setPrimaryKeyColumns(Collections.emptyList()); vt.setEscapeSql(escapeSql); ds.createVirtualTable(vt); return guessFeatureType(ds, vt.getName(), guessGeometrySrid); } finally { if (vtName != null) { ds.dropVirtualTable(name); } } }
VirtualTable vt = new VirtualTable(typeName, sb.toString()); vt.addGeometryMetadatata(theGeomName, Polygon.class, 4326); vt.setPrimaryKeyColumns(Arrays.asList(gidName)); if (existing != null) { if (!existing.equals(vt)) { delegate.dropVirtualTable(collectionTableName); existing = null;
public void testInvalidQuery() throws Exception { String sql = dataStore.getVirtualTables().get("riverReduced").getSql(); VirtualTable vt = new VirtualTable("riverPolluted", "SOME EXTRA GARBAGE " + sql); vt.addGeometryMetadatata("geom", LineString.class, -1); try { dataStore.addVirtualTable(vt); fail("Should have failed with invalid sql definition"); } catch (IOException e) { // ok, that's what we expected } }
/** * Checks the view definition works as expected and returns the feature type guessed solely by * looking at the sql and the first row of its output * * @param newSchema * @return * @throws IOException */ protected SimpleFeatureType testViewDefinition(VirtualTable virtualTable, boolean guessGeometrySrid) throws IOException { // check out if the view can be used JDBCDataStore ds = (JDBCDataStore) getCatalog().getDataStore(storeId).getDataStore(null); String vtName = null; try { // use a highly random name do { vtName = UUID.randomUUID().toString(); } while (Arrays.asList(ds.getTypeNames()).contains(vtName)); // try adding the vt and see if that works VirtualTable vt = new VirtualTable(vtName, virtualTable); // hide the primary key definitions or we'll loose some columns vt.setPrimaryKeyColumns(Collections.EMPTY_LIST); ds.addVirtualTable(vt); return guessFeatureType(ds, vt.getName(), guessGeometrySrid); } finally { if(vtName != null) { ds.removeVirtualTable(name); } } }
VirtualTable vt3 = (VirtualTable) ft.getMetadata().get(FeatureTypeInfo.JDBC_VIRTUAL_TABLE); assertEquals(8, vt3.getGeometries().size()); for (String g : vt3.getGeometries()) { Class<? extends Geometry> geom = vt3.getGeometryType(g); assertEquals(srids.get(g).intValue(), vt3.getNativeSrid(g)); assertEquals(types.get(g), geom.getName());
public void testSqlEscaping() throws Exception { VirtualTable vt = new VirtualTable("test", "%param1%"); vt.setEscapeSql(true); vt.addParameter( new VirtualTableParameter("param1", "default_value", new RegexpValidator(".*"))); String singleQuote = vt.expandParameters( new Hints( Hints.VIRTUAL_TABLE_PARAMETERS, vt.expandParameters( new Hints( Hints.VIRTUAL_TABLE_PARAMETERS, vt.expandParameters( new Hints( Hints.VIRTUAL_TABLE_PARAMETERS,
/** * Sets the geometries details and the primary key columns into the virtual table * @param vt */ public void fillVirtualTable(VirtualTable vt) { List<String> pks = new ArrayList<String>(); for(SQLViewAttribute att : attributes) { if(Geometry.class.isAssignableFrom(att.getType())) { if(att.getSrid() == null) { vt.addGeometryMetadatata(att.getName(), att.getType(), 4326); } else { vt.addGeometryMetadatata(att.getName(), att.getType(), att.getSrid()); } } if(att.pk) { pks.add(att.getName()); } } if(pks.size() > 0) { vt.setPrimaryKeyColumns(pks); } }
sb.append(vtable.expandParameters(null)); sb.append(")"); dialect.encodeTableAlias("vtable", sb); column.sqlType = metadata.getColumnType(i); column.nullable = metadata.isNullable(i) != ResultSetMetaData.columnNoNulls; column.srid = vtable.getNativeSrid(column.name); column.binding = vtable.getGeometryType(column.name); if (column.binding == null) {
@Override protected void onValidate(IValidatable validatable) { String vtName = (String) validatable.getValue(); final DataStoreInfo store = getCatalog().getStore(storeId, DataStoreInfo.class); List<FeatureTypeInfo> ftis = getCatalog().getResourcesByStore(store, FeatureTypeInfo.class); for (FeatureTypeInfo curr : ftis) { VirtualTable currvt = curr.getMetadata().get(FeatureTypeInfo.JDBC_VIRTUAL_TABLE, VirtualTable.class); if(currvt != null) { if(typeInfoId == null || !typeInfoId.equals(curr.getId())) { if(currvt.getName().equals(vtName)) { Map<String, String> map = new HashMap<String, String>(); map.put("name", vtName); map.put("typeName", curr.getName()); error(validatable, "duplicateSqlViewName", map); return; } } } } } }
public void updateVirtualTable(VirtualTable vt) { for (String name : vt.getParameterNames()) { vt.removeParameter(name); } for (Parameter param : parameters) { vt.addParameter(param.toVirtualTableParameter()); } }
name = virtualTable.getName(); sql = virtualTable.getSql(); escapeSql = virtualTable.isEscapeSql();
try { if (virtualTable != null) { srid = virtualTable.getNativeSrid(name); } else { srid = dialect.getGeometrySRID(databaseSchema, tableName, name, cx); try { if (virtualTable != null) { dimension = virtualTable.getDimension(name); } else { dimension =
if (virtualTables.containsKey(tableName)) { VirtualTable vt = virtualTables.get(tableName); if (vt.getPrimaryKeyColumns().size() == 0) { pkey = new NullPrimaryKey(tableName); } else { for (String pkName : vt.getPrimaryKeyColumns()) {