mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Revert SQL/JSON features
The reverts the following and makes some associated cleanups:
commit f79b803dc: Common SQL/JSON clauses
commit f4fb45d15: SQL/JSON constructors
commit 5f0adec25: Make STRING an unreserved_keyword.
commit 33a377608: IS JSON predicate
commit 1a36bc9db: SQL/JSON query functions
commit 606948b05: SQL JSON functions
commit 49082c2cc: RETURNING clause for JSON() and JSON_SCALAR()
commit 4e34747c8: JSON_TABLE
commit fadb48b00: PLAN clauses for JSON_TABLE
commit 2ef6f11b0: Reduce running time of jsonb_sqljson test
commit 14d3f24fa: Further improve jsonb_sqljson parallel test
commit a6baa4bad: Documentation for SQL/JSON features
commit b46bcf7a4: Improve readability of SQL/JSON documentation.
commit 112fdb352: Fix finalization for json_objectagg and friends
commit fcdb35c32: Fix transformJsonBehavior
commit 4cd8717af: Improve a couple of sql/json error messages
commit f7a605f63: Small cleanups in SQL/JSON code
commit 9c3d25e17: Fix JSON_OBJECTAGG uniquefying bug
commit a79153b7a: Claim SQL standard compliance for SQL/JSON features
commit a1e7616d6: Rework SQL/JSON documentation
commit 8d9f9634e: Fix errors in copyfuncs/equalfuncs support for JSON node types.
commit 3c633f32b: Only allow returning string types or bytea from json_serialize
commit 67b26703b: expression eval: Fix EEOP_JSON_CONSTRUCTOR and EEOP_JSONEXPR size.
The release notes are also adjusted.
Backpatch to release 15.
Discussion: https://postgr.es/m/40d2c882-bcac-19a9-754d-4299e1d87ac7@postgresql.org
This commit is contained in:
@@ -467,7 +467,7 @@ type_declaration: S_TYPEDEF
|
||||
/* an initializer specified */
|
||||
initializer = 0;
|
||||
}
|
||||
var_type opt_pointer ECPGColLabel opt_array_bounds ';'
|
||||
var_type opt_pointer ECPGColLabelCommon opt_array_bounds ';'
|
||||
{
|
||||
add_typedef($5, $6.index1, $6.index2, $3.type_enum, $3.type_dimension, $3.type_index, initializer, *$4 ? 1 : 0);
|
||||
|
||||
@@ -701,43 +701,6 @@ var_type: simple_type
|
||||
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
|
||||
}
|
||||
}
|
||||
| STRING
|
||||
{
|
||||
/*
|
||||
* It's quite horrid that ECPGColLabelCommon excludes
|
||||
* unreserved_keyword, meaning that unreserved keywords can't be
|
||||
* used as type names in var_type. However, this is hard to avoid
|
||||
* since what follows ecpgstart can be either a random SQL
|
||||
* statement or an ECPGVarDeclaration (beginning with var_type).
|
||||
* Pending a bright idea about how to fix that, we must
|
||||
* special-case STRING (and any other unreserved keywords that are
|
||||
* likely to be needed here).
|
||||
*/
|
||||
if (INFORMIX_MODE)
|
||||
{
|
||||
$$.type_enum = ECPGt_string;
|
||||
$$.type_str = mm_strdup("char");
|
||||
$$.type_dimension = mm_strdup("-1");
|
||||
$$.type_index = mm_strdup("-1");
|
||||
$$.type_sizeof = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* this is for typedef'ed types */
|
||||
struct typedefs *this = get_typedef("string");
|
||||
|
||||
$$.type_str = (this->type->type_enum == ECPGt_varchar || this->type->type_enum == ECPGt_bytea) ? EMPTY : mm_strdup(this->name);
|
||||
$$.type_enum = this->type->type_enum;
|
||||
$$.type_dimension = this->type->type_dimension;
|
||||
$$.type_index = this->type->type_index;
|
||||
if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0)
|
||||
$$.type_sizeof = this->type->type_sizeof;
|
||||
else
|
||||
$$.type_sizeof = cat_str(3, mm_strdup("sizeof("), mm_strdup(this->name), mm_strdup(")"));
|
||||
|
||||
struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
|
||||
}
|
||||
}
|
||||
| s_struct_union_symbol
|
||||
{
|
||||
/* this is for named structs/unions */
|
||||
@@ -1379,7 +1342,7 @@ ECPGTypedef: TYPE_P
|
||||
/* an initializer specified */
|
||||
initializer = 0;
|
||||
}
|
||||
ECPGColLabel IS var_type opt_array_bounds opt_reference
|
||||
ECPGColLabelCommon IS var_type opt_array_bounds opt_reference
|
||||
{
|
||||
add_typedef($3, $6.index1, $6.index2, $5.type_enum, $5.type_dimension, $5.type_index, initializer, *$7 ? 1 : 0);
|
||||
|
||||
|
||||
@@ -47,8 +47,6 @@ my %replace_string = (
|
||||
'NOT_LA' => 'not',
|
||||
'NULLS_LA' => 'nulls',
|
||||
'WITH_LA' => 'with',
|
||||
'WITH_LA_UNIQUE' => 'with',
|
||||
'WITHOUT_LA' => 'without',
|
||||
'TYPECAST' => '::',
|
||||
'DOT_DOT' => '..',
|
||||
'COLON_EQUALS' => ':=',
|
||||
|
||||
@@ -83,7 +83,6 @@ filtered_base_yylex(void)
|
||||
case WITH:
|
||||
case UIDENT:
|
||||
case USCONST:
|
||||
case WITHOUT:
|
||||
break;
|
||||
default:
|
||||
return cur_token;
|
||||
@@ -144,19 +143,6 @@ filtered_base_yylex(void)
|
||||
case ORDINALITY:
|
||||
cur_token = WITH_LA;
|
||||
break;
|
||||
case UNIQUE:
|
||||
cur_token = WITH_LA_UNIQUE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WITHOUT:
|
||||
/* Replace WITHOUT by WITHOUT_LA if it's followed by TIME */
|
||||
switch (next_token)
|
||||
{
|
||||
case TIME:
|
||||
cur_token = WITHOUT_LA;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case UIDENT:
|
||||
|
||||
Reference in New Issue
Block a user