亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Apache Calcite 實(shí)現(xiàn)方言轉(zhuǎn)換的代碼

 更新時(shí)間:2021年04月23日 09:57:31   作者:Nobi  
這篇文章主要介紹了Apache Calcite 實(shí)現(xiàn)方言轉(zhuǎn)換的代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

定義

Calcite能夠通過解析Sql為SqlNode,再將SqlNode轉(zhuǎn)化為特定數(shù)據(jù)庫(kù)的方言的形式實(shí)現(xiàn)Sql的統(tǒng)一。

實(shí)現(xiàn)

在Calcite中實(shí)現(xiàn)方言轉(zhuǎn)換的主要類是SqlDialect基類,其具體的變量含義如下:

public class SqlDialect {

BUILT_IN_OPERATORS_LIST: 支持的內(nèi)置定義函數(shù)或者運(yùn)算符(例如:abs and..)

// 列 表的標(biāo)識(shí)符
String identifierQuoteString:    標(biāo)識(shí)符的開始符號(hào)
String identifierEndQuoteString: 標(biāo)識(shí)符的結(jié)束符號(hào)
String identifierEscapedQuote: (暫時(shí)沒有弄明白這個(gè)在做什么,像是字符串中的轉(zhuǎn)義符?)

// 常量的標(biāo)識(shí)符
String literalQuoteString:    常量的開始符號(hào)
String literalEndQuoteString: 常量的結(jié)束符號(hào)
String literalEscapedQuote:(暫時(shí)沒有弄明白這個(gè)在做什么,像是字符串中的轉(zhuǎn)義符?)

DatabaseProduct databaseProduct: 所屬的數(shù)據(jù)庫(kù)產(chǎn)品
NullCollation nullCollation: 在進(jìn)行排序查詢式,空值的返回順序
RelDataTypeSystem dataTypeSystem: 數(shù)據(jù)類型

// 和解析相關(guān)
Casing unquotedCasing: 大小寫轉(zhuǎn)換
Casing quotedCasing: 大小寫轉(zhuǎn)換
boolean caseSensitive: 是否大小寫敏感(列名 表明 函數(shù)名等)
}
// 方法區(qū)(不同的數(shù)據(jù)源根據(jù)細(xì)節(jié)的不同實(shí)現(xiàn)自定義的復(fù)寫方法)
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)

  這個(gè)方法就可以根據(jù)具體的數(shù)據(jù)源的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,例如:

  @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);
  }

  就可以經(jīng)Sql中的Cast語(yǔ)句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();

到此這篇關(guān)于Apache Calcite 實(shí)現(xiàn)方言轉(zhuǎn)換的代碼的文章就介紹到這了,更多相關(guān)Apache Calcite方言轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下Mysql定時(shí)任務(wù)備份數(shù)據(jù)的實(shí)現(xiàn)方法

    Linux下Mysql定時(shí)任務(wù)備份數(shù)據(jù)的實(shí)現(xiàn)方法

    當(dāng)安裝完成操作系統(tǒng)之后,默認(rèn)便會(huì)啟動(dòng)此任務(wù)調(diào)度命令。下面這篇文章主要給大家介紹了關(guān)于在Linux下Mysql定時(shí)任務(wù)備份數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • linux系統(tǒng)報(bào)xfs_vm_releasepage警告問題的處理方法

    linux系統(tǒng)報(bào)xfs_vm_releasepage警告問題的處理方法

    這篇文章主要給大家介紹了關(guān)于linux系統(tǒng)報(bào)xfs_vm_releasepage警告問題的處理方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • ubuntu中終端命令提示符太長(zhǎng)的修改方法匯總

    ubuntu中終端命令提示符太長(zhǎng)的修改方法匯總

    Linux(Ubuntu)終端 命令提示符太長(zhǎng) 怎么辦?下面這篇文章主要給大家介紹了關(guān)于ubuntu中終端命令提示符太長(zhǎng)的修改方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • CentOS7下安裝yum源及上傳下載命令rz、sz安裝方法(圖解)

    CentOS7下安裝yum源及上傳下載命令rz、sz安裝方法(圖解)

    這篇文章主要介紹了CentOS7下安裝yum源及上傳下載命令rz、sz安裝方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • yum安裝CDH5.5 hive、impala的過程詳解

    yum安裝CDH5.5 hive、impala的過程詳解

    這篇文章主要介紹了yum安裝CDH5.5 hive、impala的過程詳解的相關(guān)資料,非常不錯(cuò) 具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • Linux配置SSH和Xshell連接服務(wù)器的教程(圖解)

    Linux配置SSH和Xshell連接服務(wù)器的教程(圖解)

    這篇文章主要介紹了Linux配置SSH和Xshell連接服務(wù)器的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • centos把網(wǎng)卡名稱修改為eth0的方法

    centos把網(wǎng)卡名稱修改為eth0的方法

    本篇文章主要介紹了centos把網(wǎng)卡名稱修改為eth0,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-02-02
  • CentOS7下安裝Scrapy步驟詳細(xì)介紹

    CentOS7下安裝Scrapy步驟詳細(xì)介紹

    這篇文章主要介紹了CentOS7下安裝Scrapy步驟詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 詳解CentOS5.5 下搭建 PHP 環(huán)境(最佳的LAMP環(huán)境)

    詳解CentOS5.5 下搭建 PHP 環(huán)境(最佳的LAMP環(huán)境)

    本篇文章詳細(xì)介紹了詳解CentOS5.5 下搭建 PHP 環(huán)境(最佳的LAMP環(huán)境),有需要的小伙伴可以參考下。
    2016-10-10
  • Centos7.9搭建自主郵件服務(wù)器詳細(xì)步驟

    Centos7.9搭建自主郵件服務(wù)器詳細(xì)步驟

    大家好,本篇文章主要講的是Centos7.9搭建自主郵件服務(wù)器詳細(xì)步驟,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-12-12

最新評(píng)論