You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Marco Jorge (Jira)" <ji...@apache.org> on 2021/12/23 18:37:00 UTC

[jira] [Comment Edited] (CALCITE-4963) Extensibility of SqlDialectFactory lacks reusability of SqlDialectFactoryImpl.*

    [ https://issues.apache.org/jira/browse/CALCITE-4963?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17464740#comment-17464740 ] 

Marco Jorge edited comment on CALCITE-4963 at 12/23/21, 6:36 PM:
-----------------------------------------------------------------

Please see [https://github.com/apache/calcite/pull/2658.]

Sample reusability:
{code:java}
import org.apache.calcite.sql.SqlDialect;
import org.apache.calcite.sql.SqlDialectFactoryImpl;
import org.apache.calcite.sql.dialect.AnsiSqlDialect;

import java.sql.DatabaseMetaData;

public class MySqlDialectFactory extends SqlDialectFactoryImpl {
  @Override
  public SqlDialect create(DatabaseMetaData databaseMetaData) {
    SqlDialect.Context context = SqlDialectFactoryImpl.Utils.context(databaseMetaData);

    if (/* my particular conditions */) {
      return /* my particular dialect */;
    } else {
      return super.create(databaseMetaData, context, new AnsiSqlDialect(context));
    }
  }
}
{code}


was (Author: marcobjorge):
Please see [https://github.com/apache/calcite/pull/2658.]

Sample reusability:
{code:java}
import org.apache.calcite.sql.SqlDialect;
import org.apache.calcite.sql.SqlDialectFactoryImpl;
import org.apache.calcite.sql.dialect.AnsiSqlDialect;

import java.sql.DatabaseMetaData;

public class MySqlDialectFactory extends SqlDialectFactoryImpl {
  @Override
  public SqlDialect create(DatabaseMetaData databaseMetaData) {
    SqlDialect.Context context = SqlDialectFactoryImpl.Utils.context(databaseMetaData);

    if (/* my particular conditions */) {
      return /* my particular dialect*/;
    } else {
      super.create(databaseMetaData, context, new AnsiSqlDialect(context));
    }
  }
} {code}

> Extensibility of SqlDialectFactory lacks reusability of SqlDialectFactoryImpl.*
> -------------------------------------------------------------------------------
>
>                 Key: CALCITE-4963
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4963
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Marco Jorge
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> _(nicetities first - great project and thanks all for the great work)_
> Although it's possible to extend the SqlDialectFactory, the custom implementation cannot reuse any of the behaviour of the default SqlDialectFactoryImpl. The default SqlDialectFactoryImpl has lots of important/reusable behaviour such as #getCasing, #isCaseSensitive, #getNullCollation or even the default decisioning in the #create method.
> If any user needs to provide a custom SqlDialect yet still support the existing SqlDialects the user needs to copy the whole SqlDialectFactoryImpl to make the custom changes.
> This request is to make the default behavior in SqlDialectFactoryImpl reusable so that extensions don't need to fork a whole class.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)