H2数据库1.4.182版本:SELECT为KEYWORD,SET却为IDENTIFIER的原因?
H2 1.4.182中SELECT与SET的关键字判定差异原因
SQL标准与数据库实现的差异:SQL标准里
SELECT是核心查询类的保留关键字,属于必须严格识别的范畴;而SET在标准中属于“条件性关键字”——只有在特定上下文(比如SET variable = value这类会话配置、变量赋值语句)中才会被当作关键字。H2 1.4.182版本的解析器设计中,没有将SET标记为全局保留关键字,默认场景下会被识别为标识符。H2版本的语法规则设计:在H2 1.4.182的语法定义逻辑里,
SELECT被明确列入全局保留关键字列表,而SET仅被定义为特定语句(如SET SCHEMA、SET AUTOCOMMIT)中的触发关键字,不在全局保留关键字范畴。这种设计是为了兼容更多自定义标识符场景——比如允许用户创建名为SET的表或列,而不会触发语法错误。上下文依赖的解析逻辑:H2的SQL解析器采用上下文驱动的识别方式:当解析器处于查询语句起始位置时,会优先匹配
SELECT这类核心关键字;而SET只有在解析器进入“会话配置”“变量赋值”这类特定上下文时,才会被当作关键字处理,否则会被当作普通标识符。
内容的提问来源于stack exchange,提问作者ericj
相关产品推荐
相关产品推荐

