Skip to content
Snippets Groups Projects
  1. Nov 30, 2017
  2. Nov 10, 2017
    • gmantele's avatar
      [ADQL] Fix escaping of double quotes in delimited identifiers. · 239c7178
      gmantele authored
      A delimited identifier is any sequence of characters between a pair of
      double quotes. For instance: "123 I am a delimited identifier!".
      
      It is of course possible to have double quotes inside this kind of identifier,
      but they have to be doubled in order to not be mistaken with the end of the
      identifier. For instance: "Cool ""identifier""".
      
      However, this escape option was not taken into account by the ADQL library,
      though the same mechanism was already in place for string contants.
      239c7178
  3. Sep 15, 2017
    • gmantele's avatar
      [UWS,TAP] Allow the specification of a custom logger in the configuration file. · 162a8748
      gmantele authored
      This commit resolves partially the issue #28
      
      Ideally, there should be an implementation of UWSLog and TAPLog working with
      Log4j and another for SLF4J (and eventually for other logging mechanism).
      Additionally, an implementation storing log messages in database would be
      interesting. All these ideas may be implemented in UWSLib and TAPLib in a
      future version.
      162a8748
  4. Sep 13, 2017
    • gmantele's avatar
      [ADQL] Also append an HINT message in the ParseException message when a SQL · fe4c3e97
      gmantele authored
      reserved word is encountered instead of a column/table/schema name/alias.
      
      On the contrary to the previous commit, this time a list of SQL reserved words
      has been added into the ADQL grammar. In this way, the parser will ensure that
      no word of this list is used in an ADQL query. The raised error is then enriched
      of an HINT message stating that this word is part of SQL, is not supported
      by ADQL and must be written between double quotes if used as an identifier.
      
      The list of SQL reserved words comes from the ADQL-2.0 standard, after removal
      of all potentially used ADQL words, in order to avoid a conflict with the
      already existing tokens in the ADQL grammar.
      fe4c3e97
    • gmantele's avatar
      [ADQL] Append an HINT message in the ParseException message when an ADQL · db0dfdad
      gmantele authored
      reserved word is encountered instead of a column/table/schema name/alias.
      
      No list of ADQL reserved words has been added into the ADQL grammar.
      
      However, the ADQL grammar has been slightly changed in order to provide a more
      precise location of the REAL wrong part of the query.
      
      Before this commit, if an ADQL reserved word (e.g. 'point') was encountered
      outside of its normal syntax (e.g. 'point' no followed by an opening
      parenthesis), the next token was highlighted instead of this one. Hence a
      confusing error message.
      
      For instance, the following ADQL query:
      
      ```sql
      SELECT point
      FROM aTable
      ```
      
      returned the following error message:
      
      > Encountered "FROM". Was expecting: "("
      
      Now, it will return the following one:
      
      > Encountered "point". Was expecting one of: "*" <QUANTIFIER> "TOP" [...]
      > (HINT: "point" is a reserved ADQL word. To use it as a column/table/schema name/alias, write it between double quotes.)
      
      This error message highlights exactly the source of the problem and even provide
      to the user a clear explanation of why the query did not parse and how it could
      be solved.
      db0dfdad
    • gmantele's avatar
  5. Sep 11, 2017
  6. Sep 08, 2017
    • gmantele's avatar
      [ADQL] Fix the transformation of NATURAL JOIN and JOIN...USING of MS-SQLServer. · e03e5725
      gmantele authored
      In the resulting SQL query, if there are an alias on the joined tables, these
      aliases must be used in the ON clause (instead of the full table name).
      
      For instance, the following ADQL query:
      
      ```sql
        SELECT *
        FROM tableA AS a NATURAL JOIN tableB AS b;
      ```
      
      should be translated into the following SQL:
      
      ```sql
        SELECT *
        FROM tableA AS a
          INNER JOIN tableB AS b
            ON a.id = b.id
      ```
      
      This commit complete the resolution of the Pull Request #16
      (more details about the issue can be got in there)
      e03e5725
    • gmantele's avatar
      [ADQL] Throwing a ParseException instead of an Error · a382b251
      gmantele authored
      when an incorrect character that can not be interpreted by
      the JavaCC Token Manager is encountered.
      
      Actually, the TokenMgrError thrown by JavaCC is caught by all
      ADQLParser.parseQuery(...) functions, wrapped inside a ParseException
      which is finally thrown instead of the TokenMgrError. In this way,
      ADQL-Lib users just have to care about a single Throwable:
      ParseException.
      
      Besides the error message has been slightly modified from:
      
      > Lexical error at line 1, column 10.  Encountered: "\u00e9" (233), after : \"\"
      
      to:
      
      > Incorrect character encountered at l.1, c.10: \"\\u00e9\" ('é'), after : \"\"
      
      Thus, the error is more user-friendly, more easy to understand by users.
      Additionally, the incorrect character is displayed, as before, in its unicode
      expression, but also in its character form (instead of an integer value that
      nobody can really understand).
      
      This commit fixes the GitHub issue #17
      a382b251
  7. Aug 24, 2017
  8. Jun 01, 2017
    • gmantele's avatar
      [ADQL] Fix nasty infinite loop when wrapping matches with SimpleReplaceHandler. · 66304427
      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
      66304427
  9. May 10, 2017
  10. Apr 20, 2017
  11. Apr 04, 2017
  12. Apr 03, 2017
  13. Mar 29, 2017
  14. Mar 16, 2017
  15. Mar 15, 2017
  16. Mar 10, 2017
  17. Mar 09, 2017
    • gmantele's avatar
      [TAP] Adapt the JUnit class testing getFile(...), · 36b4a8bf
      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).
      36b4a8bf
    • gmantele's avatar
      [TAP] Fix and add JUnit tests. Now, they should work on any machine. · 0422fb7d
      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.
      0422fb7d
  18. Mar 02, 2017
  19. Feb 23, 2017
  20. Feb 22, 2017
  21. Feb 20, 2017
  22. Feb 01, 2017
  23. Sep 20, 2016
    • gmantele's avatar
      [ADQL] Fix the tree generated by the parsing of NATURAL JOINs. · 7ca49f81
      gmantele authored
      The "normal" JOIN:
          A JOIN B ON A.id = B.id JOIN C ON B.id = C.id
      is correctly interpreted as:
          ( (A JOIN B ON A.id = B.id) JOIN C ON B.id = C.id )
      But with a NATURAL JOIN, the tree is mirrored:
          A NATURAL JOIN B NATURAL JOIN C
      gives:
      	( A NATURAL JOIN (B NATURAL JOIN C) )
      instead of:
          ( (A NATURAL JOIN B) NATURAL JOIN C )
      This is not a problem when the SQL translation is identical to the ADQL
      expression, but for some DBMS a conversion into a INNER JOIN ON is necessary
      and in this case we got the following SQL:
          A JOIN B JOIN C ON A.id = B.id ON B.id = C.id
      Which seems to work, but is syntactically strange.
      
      This commit should fix the generated tree. A "normal" JOIN and a NATURAL JOIN
      should now have the same form. A JUnit test has been added into TestADQLParser
      to check that: testJoinTree().
      7ca49f81
  24. Sep 14, 2016
  25. Jul 13, 2016
Loading