java温度转换自动识别(Apache Calcite 实现方言转换的代码)
类别:服务器 浏览量:965
时间:2021-10-12 00:54:47 java温度转换自动识别
Apache Calcite 实现方言转换的代码定义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方言转换内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- 如何认识服务器(关于Nginx、Apache、Tomcat三个WEB服务器的区别和认知)
- apache 代理服务器返回403(Apache中301重定向的配置代码)
- apache tomcat安装教程(Apache及Tomcat搭建集群环境过程解析)
- apache怎么配置服务器(Apache2 WEB服务器的配置步骤分享)
- apache搭建php环境(Windows上安装Apache2、PHP5、MySQL5及与Resin配合实现多系统之整合)
- apache连接tomcat配置(Apache结合Tomcat实现动静分离的方法)
- 开源asp.net(apache下支持asp.net的实现方法)
- 自己搭建域名解析服务器(apache 二级域名解析实现方法)
- apache用户认证配置(apache开启.htaccess及.htaccess的使用方法)
- apache服务器配置伪静态(apache中通过mod_rewrite实现伪静态页面的方法)
- apache服务配置详解(APACHE 多站点配置方法)
- apache和yii域名配置(yii框架数据库关联查询操作示例)
- 如何用wampserver打开自己写的php(WampServer下安装多个版本的PHP、mysql、apache图文教程)
- apachemodule定义(使ApacheBench支持multi-url的方法)
- php环境搭建apache(apache 支持 php5 的配置方法)
- xampp安装后启动apache弹出对话框(XAMPP下使用顶级域名绑定虚拟主机的配置方法和示例)
- 营养餐是什么(学校营养餐是什么)
- 谁说女子不如男 范冰冰演的武则天只是其一,另外两位你认识吗(谁说女子不如男)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
热门推荐
- MongoDB 日志文件太大
- 数据库该不该用外键
- laravel配置文件动态化(在Laravel 的 Blade 模版中实现定义变量)
- 命令行如何使用xampp中的mysql(解决xampp自启动和mysql.sock问题)
- python中读取文件怎么操作(Python实现的读取文件内容并写入其他文件操作示例)
- mysql数据库出现乱码(数据库 MySQL中文乱码解决办法总结)
- pythonselenium判断网页加载完成(python 实现selenium断言和验证的方法)
- php的底层分析(PHP反射原理与用法深入分析)
- php返回数组值最大的键(PHP实现通过二维数组键值获取一维键名操作示例)
- python改变图片的色深设置(Python实现去除图片中指定颜色的像素功能示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9