package org.jgrasstools.spatialite;
import java.util.ArrayList;
import java.util.List;
import org.jgrasstools.dbs.spatialite.SpatialiteGeometryColumns;
import org.jgrasstools.dbs.spatialite.jgt.SpatialiteDb;
import org.jgrasstools.dbs.spatialite.objects.TableLevel;
public class SpatialiteGuiUtils {
public static String getSelectQuery( SpatialiteDb db, final TableLevel selectedTable, boolean geomFirst,
boolean binarizeGeoms ) throws Exception {
String tableName = selectedTable.tableName;
String letter = tableName.substring(0, 1);
List<String[]> tableColumns = db.getTableColumns(tableName);
SpatialiteGeometryColumns geometryColumns = db.getGeometryColumnsForTable(tableName);
String query = "SELECT ";
if (geomFirst) {
// first geom
List<String> nonGeomCols = new ArrayList<String>();
for( int i = 0; i < tableColumns.size(); i++ ) {
String colName = tableColumns.get(i)[0];
if (geometryColumns != null && colName.equals(geometryColumns.f_geometry_column)) {
if (binarizeGeoms) {
colName = "ST_AsBinary(" + letter + "." + colName + ") as " + colName;
} else {
colName = letter + "." + colName + " as " + colName;
}
query += colName;
} else {
nonGeomCols.add(colName);
}
}
// then others
for( int i = 0; i < nonGeomCols.size(); i++ ) {
String colName = tableColumns.get(i)[0];
query += "," + letter + "." + colName;
}
} else {
for( int i = 0; i < tableColumns.size(); i++ ) {
if (i > 0)
query += ",";
String colName = tableColumns.get(i)[0];
if (geometryColumns != null && colName.equals(geometryColumns.f_geometry_column)) {
if (binarizeGeoms) {
colName = "ST_AsBinary(" + letter + "." + colName + ") as " + colName;
} else {
colName = letter + "." + colName + " as " + colName;
}
query += colName;
} else {
query += letter + "." + colName;
}
}
}
query += " FROM " + tableName + " " + letter;
return query;
}
}