JDBC Driver for GraphQL

Build 22.0.8462


General Changes

  • Added support for using PKCE with the authorization code OAuth grant type.
  • Added the Default column to the sys_procedureparameters table.
  • Added support for flatenning arguments of type "INPUT_OBJECT". The depth can be controlled by the ExpandArgumentsDepth connection property.

  • Optimized metadata discovery. If a specific argument is the plural form ("subregions") of a column ("subregion") it will not be pushed anymore as a separate column but it will be used as a serverside filter for the column ("subregion").
  • Added support for custom scalar types as pagination arguments.
  • Added "cursorType", "offsetArgumentType", and "pageSizeArgumentType" as extra customizable table info in generated schema files.
  • Added the IsPath column to the sys_procedureparameters table.
  • We now support handling the keyword "COLLATE" as standard function name as well.
  • The method GetJDBCMinorVersion() and GetJDBCMajorVersion() return 4.2 as the supported JDBC major / minor version.
  • Removed support for JRE 1.6. JRE 1.8 and above is now required.
  • Added the ExposeDynamicProcedures connection property.
  • Added the ExpandTemporaryTablesDepth connection property.
  • Added support for the AwsCognitoBasic and AwsCognitoSrp authentication methods. They can be used when connecting to the AWS AppSync service.
  • The method DatabaseMetaData.getTypeInfo() now returns all the data types the driver supports. Previously it was returning only a portion of the data types. The returns types include: tinyint, smallint, int, bigint, float, double, numeric, decimal, bit, date, datetime, time, varchar, binary, uuid.
  • Correct the return value of method DatabaseMetaData.supportsOuterJoins(), it used to return the wrong value.
  • Added support for executing the IN operation server side when the argument type is of type LIST. This will be detected automatically based on the introspection schema.To add support for the IN operator in previously generated scripts you must modify the "other:filter" extra info from "other:filter=id:=" to "other:filter=id:=,IN".
  • Added support for Offset pagination on GraphQL objects of type LIST.

  • Renamed the "other:pageInfoObjects" table extra info to "other:paginationObjects".

  • Removed the "other:paginationType" table extra info.
  • Added support for exposing tables and columns dynamically based on the INTROSPECTION mechanism of the GraphQL service. The metadata output can be controlled with the following properties:1) ExpandTablesDepth2) ExpandColumnsDepth3) IncludeDeprecatedMetadata
  • Added support for exposing GraphQL mutations as stored procedures. If a mutation has fields of type LIST, we will push a temporary table foreach of them. These tables will be of type "TEMPORARY TABLE" and are listed when selecting from "sys_tables". Example of a complex mutation:
    statement.execute("INSERT INTO productCreate_metafields#TEMP(namespace,key,value,type) VALUES('MRproductInfo','ALU','449788022','string')");
    statement.execute("INSERT INTO productCreate_variants#TEMP(RowId,price,sku,inventoryManagement,weightUnit,weight,options,metafields,inventoryQuantities) VALUES(1,'39.99','38536314-0acb-4d3f-b8ff-a0f2014d2c75','SHOPIFY','POUNDS',1,'L,XL,XXL','productCreate_variants_metafields#TEMP','productCreate_variants_inventoryQuantities#TEMP')");
    statement.execute("INSERT INTO productCreate_variants_metafields#TEMP(ParentId,namespace,key,value,type) VALUES('1','MRproductInfo','ALU','449788022-M-','string')");
    statement.execute("INSERT INTO productCreate_variants_metafields#TEMP(ParentId,namespace,key,value,type) VALUES('1','MRproductInfo','ItemNumber','400000881201','string')");
    statement.execute("INSERT INTO productCreate_variants_inventoryQuantities#TEMP(ParentId,locationId,availableQuantity) VALUES('1','gid://shopify/Location/1448223412312389678762340087',5)");
    statement.execute("INSERT INTO productCreate_media#TEMP(originalSource,alt,mediaContentType) VALUES('https://sampleUrl.com','Magic Shoes','IMAGE')");
    statement.execute("EXECUTE productCreate title='Shoes  - 449788022', descriptionHtml=' - MEN\\'S SHOES  42-MENS L/S TEES'," +
    "  productType='Staging', vendor='Shoes Company', published='false', options='size,width'," +
    " metafields='productCreate_metafields#TEMP', variants='productCreate_variants#TEMP', media='productCreate_media#TEMP'");
  • Support for JDK 17
  • Added support for aggregate columns. The "other:fragment" extra info is required to specify the desired group of fields. Ex:
    attr name="ColumnValues" xs:type="string" other:relativePath="column_values" desc="Column values."  other:fragment="fragment ItemColumnValues on ColumnValue {  id \\r\\n value }" 
  • Removed IS_READONLY, IS_KEY, NUMERIC_PRECISION, DECIMAL_DIGITS from DatabaseMetadata.GetColumns() as they are not part of the JDBC Specification. This information is still available via other metadata calls.
  • Added support for the STRING_SPLIT table-valued function in the CROSS APPLY clause.
  • Added the KeySeq column to the sys_foreignkeys table.
  • Added the new sys_primarykeys system table.
  • Updated the Literal Function Names for relative date/datetime functions. Previously relative date/datetime functions resolved to a different value when used in the projection vs te predicate. Ie: SELECT LAST_MONTH() AS lm, Col FROM Table WHERE Col > LAST_MONTH(). Formerly the two LAST_MONTH() methods would resolve to different datetimes. Now they will match.
  • As a replacement for the previous behavior, the relative date/datetime functions in the criteria may have an 'L' appended to them. Ie: WHERE col > L_LAST_MONTH(). This will continue to resolve to the same values that previously were calculated in the criteria. Note that the "L_" prefix will only work in the predicate - it not available for the projection.
  • Added the TCP Logging Module for the logging information happening on the TCP wire protocol. The transport bytes that are incoming and ongoing will be logged at verbosity=5.
  • Added support for handling client side formulas during insert / update. For example: UPDATE Table SET Col1 = Concat(Col1, " - ", Col2) WHERE Col2 LIKE 'A%'
  • Updated how display sizes are determined for varchar primary key and foreign key columns so they will match the reported length of the column.
  • Non-conditional updates between two columns is now available to all drivers. For example: UPDATE Table SET Col1=Col2

  • Reduced the length to 255 for varchar primary key and foreign key columns.
  • Updated implicit and metadata caching to improve performance and support for multiple connections. Old metadata caches are not compatible - you would need to generate new metadata caches if you are currently using CacheMetadata.
  • Updated index naming convention to avoid duplicates
  • Updated and standardized Getting Started connection help.
  • Added the Advanced Features section to the help of all drivers.
  • Categorized connection property listings in the help for all editions.
04/15 /20217775GeneralChanged
  • Kerberos authentication is updated to use TCP by default, but will fall back to UDP if a TCP connection cannot be established

Copyright (c) 2023 CData Software, Inc. - All rights reserved.
Build 22.0.8462