婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Apache Calcite 實現方言轉換的代碼

Apache Calcite 實現方言轉換的代碼

熱門標簽:福州企業電銷機器人排名 上海申請高400開頭的電話 打400電話怎么辦理收費 10086外包用的什么外呼系統 麗江真人語音電話外呼系統 宿城區電話機器人找哪家 400電話辦理介紹信 怎么找到沒有地圖標注的店 河南防封號電銷機器人是什么

定義

Calcite能夠通過解析Sql為SqlNode,再將SqlNode轉化為特定數據庫的方言的形式實現Sql的統一。

實現

在Calcite中實現方言轉換的主要類是SqlDialect基類,其具體的變量含義如下:

public class SqlDialect {

BUILT_IN_OPERATORS_LIST: 支持的內置定義函數或者運算符(例如:abs and..)

// 列 表的標識符
String identifierQuoteString:    標識符的開始符號
String identifierEndQuoteString: 標識符的結束符號
String identifierEscapedQuote: (暫時沒有弄明白這個在做什么,像是字符串中的轉義符?)

// 常量的標識符
String literalQuoteString:    常量的開始符號
String literalEndQuoteString: 常量的結束符號
String literalEscapedQuote:(暫時沒有弄明白這個在做什么,像是字符串中的轉義符?)

DatabaseProduct databaseProduct: 所屬的數據庫產品
NullCollation nullCollation: 在進行排序查詢式,空值的返回順序
RelDataTypeSystem dataTypeSystem: 數據類型

// 和解析相關
Casing unquotedCasing: 大小寫轉換
Casing quotedCasing: 大小寫轉換
boolean caseSensitive: 是否大小寫敏感(列名 表明 函數名等)
}
// 方法區(不同的數據源根據細節的不同實現自定義的復寫方法)
allowsAs
configureParser
configureParser
containsNonAscii
create
defaultNullDirection
emptyContext
emulateJoinTypeForCrossJoin
emulateNullDirection
emulateNullDirectionWithIsNull
getCalendarPolicy
getCastSpec
getConformance
getDatabaseProduct
getNullCollation
getProduct
getQuotedCasing
getQuoting
getSingleRowTableName
getTypeSystem
getUnquotedCasing
hasImplicitTableAlias
identifierNeedsQuote
isCaseSensitive
quoteIdentifier
quoteIdentifier
quoteIdentifier
quoteStringLiteral
quoteStringLiteral
quoteStringLiteralUnicode
quoteTimestampLiteral
requiresAliasForFromItems
rewriteSingleValueExpr
supportsAggregateFunction
supportsAliasedValues
supportsCharSet
supportsDataType
supportsFunction
supportsGroupByWithCube
supportsGroupByWithRollup
supportsImplicitTypeCoercion
supportsNestedAggregations
supportsOffsetFetch
supportsWindowFunctions
unparseCall
unparseDateTimeLiteral
unparseFetchUsingAnsi
unparseFetchUsingLimit
unparseLimit
unparseOffset
unparseOffsetFetch
unparseSqlDatetimeArithmetic
unparseSqlIntervalLiteral
unparseSqlIntervalQualifier
unparseTopN
unquoteStringLiteral

使用方式Demo

/** Returns SqlNode for type in "cast(column as type)", which might be
  * different between databases by type name, precision etc.
  *
  * <p>If this method returns null, the cast will be omitted. In the default
  * implementation, this is the case for the NULL type, and therefore
  * {@code CAST(NULL AS <nulltype>)} is rendered as {@code NULL}. */
  public SqlNode getCastSpec(RelDataType type)

  這個方法就可以根據具體的數據源的數據類型進行轉換,例如:

  @Override public SqlNode getCastSpec(RelDataType type) {
    switch (type.getSqlTypeName()) {
    case VARCHAR:
      // MySQL doesn't have a VARCHAR type, only CHAR.
      int vcMaxPrecision = this.getTypeSystem().getMaxPrecision(SqlTypeName.CHAR);
      int precision = type.getPrecision();
      if (vcMaxPrecision > 0 && precision > vcMaxPrecision) {
        precision = vcMaxPrecision;
      }
      return new SqlDataTypeSpec(
          new SqlBasicTypeNameSpec(SqlTypeName.CHAR, precision, SqlParserPos.ZERO),
          SqlParserPos.ZERO);
    }
    return super.getCastSpec(type);
  }

  就可以經Sql中的Cast語句Cast為特定的類型:

  final String query = "select cast(\"product_id\" as varchar(50)), \"product_id\" "
       + "from \"product\" ";
   final String expected = "SELECT CAST(`product_id` AS CHAR(50)), `product_id`\n"
       + "FROM `foodmart`.`product`";
// 解析過的SqlNode
sqlNode.toSqlString(CalciteSqlDialect.DEFAULT).getSql();

到此這篇關于Apache Calcite 實現方言轉換的代碼的文章就介紹到這了,更多相關Apache Calcite方言轉換內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:雞西 運城 連云港 荊門 面試通知 隴南 遵義 朝陽

巨人網絡通訊聲明:本文標題《Apache Calcite 實現方言轉換的代碼》,本文關鍵詞  Apache,Calcite,實現,方言,轉換,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Apache Calcite 實現方言轉換的代碼》相關的同類信息!
  • 本頁收集關于Apache Calcite 實現方言轉換的代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 阜平县| 普洱| 纳雍县| 外汇| 贵州省| 安溪县| 海淀区| 阳信县| 新河县| 准格尔旗| 景泰县| 彭阳县| 孟村| 清苑县| 田阳县| 清水河县| 乃东县| 噶尔县| 双鸭山市| 黄浦区| 闻喜县| 家居| 繁峙县| 邯郸市| 朝阳县| 额济纳旗| 淮安市| 隆林| 闵行区| 津市市| 定西市| 深泽县| 靖边县| 宁化县| 成都市| 泽库县| 新津县| 溧阳市| 濮阳市| 甘南县| 南昌县|