Hello, I work on the Apache SIS (Spatial Information System) project. Many geographical files in the public domain are Shapefiles that contains points, polygons or lines, and their underlying datafiles are old, deprecated DBase III files (.dbf extension), that are quite no more redeable since ODBC – JDBC bridge drivers have disappeared, and are no more handled by Java.
We had to create a DBase III JDBC driver (a real jump in history !) and you can see the current source code if you download the current snapshot version of Apache SIS here : http://sis.apache.org/downloads.html#maven-snapshot Our DBase III driver have most of the code needed to read the tables (Driver, Connection, DatabaseMetadata, Metadata, Statement, ResulSet, etc.), but now parsing SQL statements are our greatest problem : I have managed to create a crude parser in response of requests coming from the Statement interface but nothing strong. And I don’t want to do any attempt with AntLR to do that because AntLR is tricky for me. I would like to know how much Calcite can substitute to what we are manually doing in term of SQL parsing in a Statement execution. Currently we have these packages, and we would like to replace one of them in favor of Calcite : Package : org.apache.sis.internal.shapefile.jdbc AbstractDbase3ByteReader.java AbstractJDBC.java CommonByteReader.java Dbase3ByteReader.java DBase3FieldDescriptor.java DBaseDataType.java DBFDriver.java MappedByteReader.java SQLConnectionClosedException.java SQLDbaseFileNotFoundException.java SQLInvalidDbaseFileFormatException.java Package : org.apache.sis.internal.shapefile.jdbc.connection AbstractConnection.java DBFConnection.java SQLClosingIOFailureException.java org.apache.sis.internal.shapefile.jdbc.metadata AbstractDatabaseMetaData.java DBFDatabaseMetaData.java DBFResultSetMataData.java Package : org.apache.sis.internal.shapefile.jdbc.resultset AbstractResultSet.java BuiltInMemoryResultSet.java DBFBuiltInMemoryResultSetForCatalogNamesListing.java DBFBuiltInMemoryResultSetForColumnsListing.java DBFBuiltInMemoryResultSetForSchemaListing.java DBFBuiltInMemoryResultSetForTablesListing.java DBFBuiltInMemoryResultSetForTablesTypesListing.java DBFRecordBasedResultSet.java DBFResultSet.java SQLIllegalColumnIndexException.java SQLNoResultException.java SQLNoSuchFieldException.java SQLNotDateException.java SQLNotNumericException.java The package I want to replace with Calcite features : org.apache.sis.internal.shapefile.jdbc.sql ClauseResolver.java ConditionalClauseResolver.java CrudeSQLParser.java SQLIllegalParameterException.java SQLInvalidStatementException.java SQLUnsupportedParsingFeatureException.java Package : org.apache.sis.internal.shapefile.jdbc.statement AbstractStatement.java DBFStatement.java Do you think that Apache Calcite may fit our needs ? And how ? Regards, Marc Le Bihan