OmniSciDB  95562058bd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
com.mapd.utility.db_vendors.PostGis_types Class Reference
+ Inheritance diagram for com.mapd.utility.db_vendors.PostGis_types:
+ Collaboration diagram for com.mapd.utility.db_vendors.PostGis_types:

Public Member Functions

boolean isAutoCommitDisabledRequired ()
 
String get_wkt (ResultSet rs, int column_number, String gis_type_name) throws SQLException
 
GisType find_gis_type (Connection conn, ResultSetMetaData metadata, int column_number) throws SQLException
 

Protected Member Functions

 PostGis_types ()
 
- Protected Member Functions inherited from com.mapd.utility.db_vendors.Db_vendor_types
 Db_vendor_types ()
 

Private Member Functions

String wkt_point (PGpoint point)
 
GisType find_type_detail (Connection conn, String ref_table_name, String ref_column_name, String column_name) throws SQLException
 

Static Private Attributes

static Hashtable< String, String > extra_types
 

Additional Inherited Members

- Static Public Member Functions inherited from com.mapd.utility.db_vendors.Db_vendor_types
static
com.mapd.utility.db_vendors.Db_vendor_types 
Db_vendor_factory (String connection_str)
 
static String gis_type_to_str (GisType type)
 
- Static Protected Attributes inherited from com.mapd.utility.db_vendors.Db_vendor_types
static HashSet< Integer > valid_srid
 

Detailed Description

Definition at line 119 of file Db_vendor_types.java.

Constructor & Destructor Documentation

com.mapd.utility.db_vendors.PostGis_types.PostGis_types ( )
inlineprotected

Definition at line 120 of file Db_vendor_types.java.

120 {}

Member Function Documentation

GisType com.mapd.utility.db_vendors.PostGis_types.find_gis_type ( Connection  conn,
ResultSetMetaData  metadata,
int  column_number 
) throws SQLException
inlinevirtual

Implements com.mapd.utility.db_vendors.Db_vendor_types.

Definition at line 178 of file Db_vendor_types.java.

References com.mapd.utility.db_vendors.PostGis_types.extra_types, com.mapd.utility.db_vendors.PostGis_types.find_type_detail(), and run_benchmark_import.result.

180  {
181  String column_name = metadata.getColumnName(column_number);
182  String column_type_name = metadata.getColumnTypeName(column_number);
183  if (column_type_name.equalsIgnoreCase("geography"))
184  return find_type_detail(
185  conn, "geography_columns", "f_geography_column", column_name);
186  else if (column_type_name.equalsIgnoreCase("geometry"))
187  return find_type_detail(conn, "geometry_columns", "f_geometry_column", column_name);
188  if (!extra_types.containsKey(column_type_name))
189  throw new SQLException(
190  "type not supported: " + column_type_name + " for column " + column_name);
191  GisType result = new GisType();
192  result.type = extra_types.get(column_type_name);
193  return result;
194  }
static Hashtable< String, String > extra_types
GisType find_type_detail(Connection conn, String ref_table_name, String ref_column_name, String column_name)

+ Here is the call graph for this function:

GisType com.mapd.utility.db_vendors.PostGis_types.find_type_detail ( Connection  conn,
String  ref_table_name,
String  ref_column_name,
String  column_name 
) throws SQLException
inlineprivate

Definition at line 196 of file Db_vendor_types.java.

References com.mapd.utility.db_vendors.PostGis_types.extra_types, run_benchmark_import.result, and run_benchmark_import.type.

Referenced by com.mapd.utility.db_vendors.PostGis_types.find_gis_type().

199  {
200  String omnisci_type = null;
201  Statement detail_st = conn.createStatement();
202  // Select for a specific column name from the ref table.
203  String select = "select type, srid from " + ref_table_name + " where "
204  + ref_column_name + " = '" + column_name + "'";
205  ResultSet rs = detail_st.executeQuery(select);
206  String ps_column_type = null;
207  int ps_srid = 0;
208  // The select statment above, can return multiple values qualified by schema/table.
209  // Unfortunately at this stage only the original postgres column name is known. If
210  // get mulitple returns with the same column name, but different types we will not be
211  // able to separate which specific column is which type. This loop checks for this
212  // condition and thows when detected.
213  while (rs.next()) {
214  String type = rs.getString(1);
215  int srid = rs.getInt(2);
216  // If multiple rows are returned with different geo types for a single coulmn name
217  // then throw.
218  if (ps_column_type != null
219  && (ps_column_type.equalsIgnoreCase(type) || srid != ps_srid)) {
220  throw new SQLException("multiple column definitions [" + ps_column_type + ":"
221  + type + "] found for column_name [" + column_name + "]");
222  }
223  ps_column_type = type;
224  ps_srid = srid;
225  }
226  if (!extra_types.containsKey(ps_column_type.toLowerCase()))
227  throw new SQLException("type not supported");
228  GisType result = new GisType();
229  result.subtype = "GEOMETRY";
230  result.srid = ps_srid;
231  result.type = extra_types.get(ps_column_type.toLowerCase()).toUpperCase();
232  return result;
233  }
static Hashtable< String, String > extra_types

+ Here is the caller graph for this function:

String com.mapd.utility.db_vendors.PostGis_types.get_wkt ( ResultSet  rs,
int  column_number,
String  gis_type_name 
) throws SQLException
inlinevirtual

Implements com.mapd.utility.db_vendors.Db_vendor_types.

Definition at line 139 of file Db_vendor_types.java.

References Fragmenter_Namespace.indexOf(), and com.mapd.utility.db_vendors.PostGis_types.wkt_point().

140  {
141  if (gis_type_name.equalsIgnoreCase("geometry")
142  || gis_type_name.equalsIgnoreCase("geography")) {
143  Object gis_object = rs.getObject(column_number);
144  PGgeometry pGeometry = (PGgeometry) gis_object;
145  if (pGeometry == null) throw new SQLException("unknown type");
146  // Try and trim the front SRID=nnnn; value from the string returned from the db.
147  // If there isn't a SRID=nnnn; string (marked by the ';') then simply
148  // return the whole string
149  int semi_colon_indx = pGeometry.getValue().indexOf(';');
150  if (-1 != semi_colon_indx && semi_colon_indx < pGeometry.getValue().length()) {
151  return pGeometry.getValue().substring(semi_colon_indx + 1);
152  }
153  return pGeometry.getValue();
154  }
155  StringBuffer WKT_string = new StringBuffer();
156  if (gis_type_name.equalsIgnoreCase("point")) {
157  PGpoint point = (PGpoint) rs.getObject(column_number);
158  WKT_string.append(extra_types.get(gis_type_name) + "(" + wkt_point(point) + ")");
159 
160  } else if (gis_type_name.equalsIgnoreCase("polygon")) {
161  PGpolygon polygon = (PGpolygon) rs.getObject(column_number);
162  WKT_string.append(extra_types.get(gis_type_name) + "((");
163  for (PGpoint p : polygon.points) {
164  WKT_string.append(wkt_point(p) + ",");
165  }
166  WKT_string.replace(WKT_string.length() - 1, WKT_string.length(), "))");
167  } else if (gis_type_name.equalsIgnoreCase("lseg")) {
168  PGlseg lseg = (PGlseg) rs.getObject(column_number);
169  WKT_string.append(extra_types.get(gis_type_name) + "(");
170  for (PGpoint p : lseg.point) {
171  WKT_string.append(wkt_point(p) + ",");
172  }
173  WKT_string.replace(WKT_string.length() - 1, WKT_string.length(), ")");
174  }
175  return WKT_string.toString();
176  }
String wkt_point(PGpoint point)
size_t indexOf(std::vector< T > &vec, T val)

+ Here is the call graph for this function:

boolean com.mapd.utility.db_vendors.PostGis_types.isAutoCommitDisabledRequired ( )
inlinevirtual

Implements com.mapd.utility.db_vendors.Db_vendor_types.

Definition at line 121 of file Db_vendor_types.java.

121  {
122  return true;
123  }
String com.mapd.utility.db_vendors.PostGis_types.wkt_point ( PGpoint  point)
inlineprivate

Definition at line 135 of file Db_vendor_types.java.

Referenced by com.mapd.utility.db_vendors.PostGis_types.get_wkt().

135  {
136  return new String("" + point.x + " " + point.y);
137  }

+ Here is the caller graph for this function:

Member Data Documentation

Hashtable<String, String> com.mapd.utility.db_vendors.PostGis_types.extra_types
staticprivate
Initial value:
= new Hashtable() {
{
put("point", "POINT");
put("lseg", "linestring");
put("linestring", "linestring");
put("polygon", "polygon");
put("multipolygon", "multipolygon");
}
}

Definition at line 126 of file Db_vendor_types.java.

Referenced by com.mapd.utility.db_vendors.PostGis_types.find_gis_type(), and com.mapd.utility.db_vendors.PostGis_types.find_type_detail().


The documentation for this class was generated from the following file: