- Aug 02, 2017
-
-
gmantele authored
On the contrary to other DBMS, MySQL supports schemas, but as databases. Which means that JDBCConnection gets from the JDBC driver that MySQL does not support schemas and so it tries to access TAP_SCHEMA tables with a 'TAP_SCHEMA_' prefix instead of 'TAP_SCHEMA.' one. Since MySQL does behave like it supports schemas, JDBCConnection.supportsSchema must be set to 'true' if the DBMS is MySQL. Besides, since no schemas are returned by the JDBC driver (cf DatabaseMetadata.listSchema(...)), the function JDBCConnection.isSchemaExisting(String, DatabaseMetaData) must always assume that the specified schema exists if the DBMS is MySQL. This is particularly important when the existence of 'TAP_UPLOAD' must be checked, because if the function returns 'false' the library will attempt to create the database/schema 'TAP_UPLOAD' and will obviously fail due to a lack of permissions. Of course, it means that the TAP implementor must create manually the schema/database 'TAP_UPLOAD' him-/her-self. The second particularity of MySQL is the quote character for identifiers. It is a back-quote (`) instead of a double quote ("). To reflect this difference, JDBCTranslator.appendIdentifier(...) has been overwritten in a new JDBCTranslator extension: MySQLTranslator. The translation of all SQL types and mathematical functions have been adapted to MySQL according to the online documentation. Few tests have been done locally with a tiny database. This seems to work but further testing should be performed in order to ensure the stability of this implementation.
-
- Jul 05, 2017
-
-
gmantele authored
'result_'.
-
- Jul 04, 2017
- Jun 19, 2017
-
-
gmantele authored
Additionally when an XML document is submitted in an HTTP POST request (i.e. with the Content-Type = (text|application)/(.+-)?xml), this is immediately set as a jobInfo in the created job.
-
- Jun 01, 2017
-
-
gmantele authored
This infinite loop occured only when the replacement object is just a wrapping of the matching object ; after replacement, the new object was inspected for matching objects. Example: infinite loop if we want to wrap all foo(...) functions with the function ROUND in the following query: SELECT foo(foo(123)) FROM myTable Expected result: SELECT ROUND(foo(ROUND(foo(123)))) FROM myTable But generated result was: SELECT ROUND(ROUND(ROUND(......foo(foo(123))))) FROM myTable
-
- May 10, 2017
-
-
gmantele authored
See the test case TestDBChecker.testClauseADQLWithNameNull() for more details.
-
- Apr 25, 2017
-
-
gmantele authored
-
gmantele authored
Now, it is recommended to throw a DBCancelledException from any DBConnection long processing. It is already done for the upload of a table, the execution of an ADQL query and the setting of a whole TAP_SCHEMA. The flag JDBCConnection#cancelled has now a bit different meaning: it is set even if the Statement.cancel() fails so that any JDBCConnection function can see that a cancellation has been requested.
-
- Apr 20, 2017
-
-
gmantele authored
- Apr 04, 2017
-
-
gmantele authored
(https://github.com/gmantele/taplib/commit/7a70c6038cef460ab169682bed391bb5ae1de1e9) It was not possible to use a GROUP BY with a qualified column name. So finally, now, a GROUP BY is a ClauseADQL<ADQLColumn> instead of a ClauseADQL<ColumnReference>. Indeed, according to the ADQL's BNF, GROUP BY items are only columns as they would appear in the SELECT clause (i.e. qualified or not, delimited or not). On the other hand an ORDER BY accepts ONLY column index or non-qualified column name/alias. The class ColumnReference is kept for backward compatibility (or in case the next version of the ADQL grammar make items of GROUP BY and ORDER BY of the same type: index or qualified column). Besides, this class is still inherited for the ORDER BY clause items (see adql.query.ADQLOrder).
-
- Apr 03, 2017
- Mar 29, 2017
- Mar 16, 2017
- Mar 10, 2017
-
-
gmantele authored
This error has been raised on the issue #32 by Zarquan.
-
gmantele authored
- empty file - not a valid VOTable document In such cases, the following error message is returned: "The input file is not a valid VOTable document!" A cause with more detais (especially the line and column numbers) may be appended. Cases handled with no error: - If the VOTable document has no rows, an empty table is uploaded. No error has to be returned. - If a row has a different number of columns than the number of declared FIELDs, additional values are ignored and missing values are replaced by NULL. This is actually nicely handled by STIL.
-
gmantele authored
Two comments: - JDBCConnection.getDBMSName(String url) is now deprecated ; it may disappear in a next version of the ADQLLibrary. - In case the DBMS name can not be retrieved (generally because of an incomplete JDBC driver implementation), NULL will be returned.
-
gmantele authored
Few useless casts have also been removed.
-
- Mar 09, 2017
-
-
gmantele authored
It is also now recommended to make DBConnection.executeQuery(ADQLQuery) return NULL if the query has been aborted (indeed, the DBConnection is the only one that can reliably know that fact). JDBCConnection has been adapted consequently.
-
gmantele authored
This class is using static attributes of type DecimalFormat. Unfortunately this type of objects can NOT be accessed by multiple threads simultaneously: it is not thread-safe. Parsing errors, mostly during TAP uploads, have been experienced for this reason. To solve quickly this issue, the main static public functions of ISO8601Format have been synchronized.
-
gmantele authored
apply a quick space replacement (by %20) for few URIs of the configuration file and remove duplicated entry (encoding) from the Gradle build script. A special test has also been added in getFile(...) in order to deliver a clear error message for users using a former version with URIs in their configuration file (only for file_root_path and metadata_file).
-
gmantele authored
Two embedded DBMS are used: H2 and a little SQLite. JDBC drivers are provided in the `lib` directory. The databases are created and deleted automatically by the JUnit tests (see `test/tap/db_testtools/DBTools for more details`). The ANT and Gradle build scripts have been updated to reflect all these test modifications.
-
- Mar 08, 2017
-
-
gmantele authored
Two classes have been modified after compilation: - ADQLParser - a simple cast for one of the automatically generated constructor. - ParseException - the token position has been stored for better syntax error messages. A note has been added at the top comment for both files to highlight the modified parts and how to restore them after re-generation.
-
gmantele authored
-
gmantele authored
This issue has been raised with an H2 database.
-
- Mar 03, 2017
-
-
vforchi authored
-
- Mar 02, 2017
- Mar 01, 2017
-
-
gmantele authored
-
- Feb 24, 2017
-
-
Ole Streicher authored
This import can not be resolved in a standalone version of adql. It also creates a circular dependency: ADQL then depends on TAP, which depends on starjava, but starjava depends on ADQL.
-
- Feb 23, 2017
-
-
gmantele authored
ResultSetTableIterator (i.e. functions returning unknown numeric values were not set with the right datatype but char* instead).
-
- Feb 22, 2017