Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2d7aacb

Browse files
committed
Added BETWEEN and IN to grammar. Map != to <>.
1 parenta3d773a commit2d7aacb

File tree

3 files changed

+55
-17
lines changed

3 files changed

+55
-17
lines changed

‎src/backend/parser/gram.y

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.19 1996/11/29 15:56:18 momjian Exp $
13+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.20 1996/11/30 03:38:05 momjian Exp $
1414
*
1515
* HISTORY
1616
* AUTHORDATEMAJOR EVENT
@@ -46,7 +46,7 @@
4646

4747
static char saved_relname[NAMEDATALEN]; /* need this for complex attributes */
4848
static bool QueryIsRule = FALSE;
49-
49+
static Node *saved_In_Expr;
5050
extern List *parsetree;
5151

5252
/*
@@ -57,7 +57,7 @@ extern List *parsetree;
5757
/*#define __YYSCLASS*/
5858

5959
static char *xlateSqlType(char *);
60-
static Node *makeA_Expr(intop, char *opname, Node *lexpr, Node *rexpr);
60+
static Node *makeA_Expr(intoper, char *opname, Node *lexpr, Node *rexpr);
6161

6262
/* old versions of flex define this as a macro */
6363
#if defined(yywrap)
@@ -127,8 +127,8 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
127127
oper_argtypes, OptStmtList, OptStmtBlock, opt_column_list, columnList,
128128
sort_clause, sortby_list, index_params,
129129
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
130-
expr_list, attrs, res_target_list, res_target_list2, def_list,
131-
opt_indirection, group_clause, groupby_list, explain_options
130+
expr_list, attrs, res_target_list, res_target_list2,
131+
def_list,opt_indirection, group_clause, groupby_list, explain_options
132132

133133
%type <boolean>opt_inh_star, opt_binary, opt_instead, opt_with_copy, index_opt_unique
134134

@@ -145,7 +145,8 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
145145
%type <coldef>columnDef
146146
%type <defelt>def_elem
147147
%type <node>def_arg, columnElem, where_clause,
148-
a_expr, AexprConst, having_clause, groupby
148+
a_expr, AexprConst, in_expr_nodes, not_in_expr_nodes,
149+
having_clause, groupby
149150
%type <value>NumConst
150151
%type <attr>event_object, attr
151152
%type <sortby>sortby
@@ -169,10 +170,10 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
169170

170171
/* Keywords */
171172
%tokenABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, AND, APPEND,
172-
ARCHIVE, ARCH_STORE, AS, ASC, BACKWARD, BEFORE, BEGIN_TRANS,BINARY,
173-
BY, CAST, CHANGE, CLOSE, CLUSTER, COLUMN, COMMIT, COPY, CREATE, CURRENT,
174-
CURSOR, DATABASE, DECLARE, DELETE, DELIMITERS, DESC, DISTINCT, DO,
175-
DROP, END_TRANS,
173+
ARCHIVE, ARCH_STORE, AS, ASC, BACKWARD, BEFORE, BEGIN_TRANS,BETWEEN,
174+
BINARY,BY, CAST, CHANGE, CLOSE, CLUSTER, COLUMN, COMMIT, COPY, CREATE,
175+
CURRENT,CURSOR, DATABASE, DECLARE, DELETE, DELIMITERS, DESC, DISTINCT,
176+
DO,DROP, END_TRANS,
176177
EXTEND, FETCH, FOR, FORWARD, FROM, FUNCTION, GRANT, GROUP,
177178
HAVING, HEAVY, IN, INDEX, INHERITS, INSERT, INSTEAD, INTO, IS,
178179
ISNULL, LANGUAGE, LIGHT, LISTEN, LOAD, MERGE, MOVE, NEW,
@@ -199,6 +200,8 @@ static Node *makeA_Expr(int op, char *opname, Node *lexpr, Node *rexpr);
199200
%rightNOT
200201
%right '='
201202
%nonassoc LIKE
203+
%nonassoc BETWEEN
204+
%nonassoc IN
202205
%nonassoc Op
203206
%nonassoc NOTNULL
204207
%nonassoc ISNULL
@@ -1813,6 +1816,20 @@ a_expr: attr opt_indirection
18131816
{ $$ = makeA_Expr(NOTNULL, NULL, $1, NULL); }
18141817
| a_expr IS NOT PNULL
18151818
{ $$ = makeA_Expr(NOTNULL, NULL, $1, NULL); }
1819+
| a_expr BETWEEN AexprConst AND AexprConst
1820+
{ $$ = makeA_Expr(AND, NULL,
1821+
makeA_Expr(OP, ">=", $1, $3),
1822+
makeA_Expr(OP, "<=", $1,$5));
1823+
}
1824+
| a_expr NOT BETWEEN AexprConst AND AexprConst
1825+
{ $$ = makeA_Expr(OR, NULL,
1826+
makeA_Expr(OP, "<", $1, $4),
1827+
makeA_Expr(OP, ">", $1, $6));
1828+
}
1829+
| a_expr IN { saved_In_Expr = $1; } '(' in_expr_nodes ')'
1830+
{ $$ = $5; }
1831+
| a_expr NOT IN { saved_In_Expr = $1; } '(' not_in_expr_nodes ')'
1832+
{ $$ = $6; }
18161833
| a_expr AND a_expr
18171834
{ $$ = makeA_Expr(AND, NULL, $1, $3); }
18181835
| a_expr OR a_expr
@@ -1838,13 +1855,29 @@ opt_indirection: '[' a_expr ']' opt_indirection
18381855
| /* EMPTY */
18391856
{ $$ = NIL; }
18401857
;
1841-
1858+
18421859
expr_list: a_expr
18431860
{ $$ = lcons($1, NIL); }
18441861
| expr_list ',' a_expr
18451862
{ $$ = lappend($1, $3); }
18461863
;
18471864

1865+
in_expr_nodes: AexprConst
1866+
{ $$ = makeA_Expr(OP, "=", saved_In_Expr, $1); }
1867+
| in_expr_nodes ',' AexprConst
1868+
{ $$ = makeA_Expr(OR, NULL, $1,
1869+
makeA_Expr(OP, "=", saved_In_Expr, $3));
1870+
}
1871+
;
1872+
1873+
not_in_expr_nodes: AexprConst
1874+
{ $$ = makeA_Expr(OP, "<>", saved_In_Expr, $1); }
1875+
| not_in_expr_nodes ',' AexprConst
1876+
{ $$ = makeA_Expr(AND, NULL, $1,
1877+
makeA_Expr(OP, "<>", saved_In_Expr, $3));
1878+
}
1879+
;
1880+
18481881
attr: relation_name '.' attrs
18491882
{
18501883
$$ = makeNode(Attr);
@@ -2085,10 +2118,10 @@ Pnull:PNULL;
20852118

20862119
%%
20872120

2088-
static Node *makeA_Expr(intop, char *opname, Node *lexpr, Node *rexpr)
2121+
static Node *makeA_Expr(intoper, char *opname, Node *lexpr, Node *rexpr)
20892122
{
20902123
A_Expr *a = makeNode(A_Expr);
2091-
a->oper =op;
2124+
a->oper =oper;
20922125
a->opname = opname;
20932126
a->lexpr = lexpr;
20942127
a->rexpr = rexpr;
@@ -2114,7 +2147,8 @@ void parser_init(Oid *typev, int nargs)
21142147
{
21152148
QueryIsRule = false;
21162149
saved_relname[0]= '\0';
2117-
2150+
saved_In_Expr = NULL;
2151+
21182152
param_type_init(typev, nargs);
21192153
}
21202154

‎src/backend/parser/keywords.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.4 1996/11/13 20:49:04 scrappy Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.5 1996/11/30 03:38:07 momjian Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -48,6 +48,7 @@ static ScanKeyword ScanKeywords[] = {
4848
{"backward",BACKWARD},
4949
{"before",BEFORE},
5050
{"begin",BEGIN_TRANS},
51+
{"between",BETWEEN},
5152
{"binary",BINARY},
5253
{"by",BY},
5354
{"cast",CAST},

‎src/backend/parser/scan.l

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.4 1996/11/11 04:54:45 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.5 1996/11/30 03:38:09 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -97,7 +97,10 @@ other.
9797
{self}{return (yytext[0]);}
9898

9999
{operator}{
100-
yylval.str =pstrdup((char*)yytext);
100+
if (strcmp((char*)yytext,"!=") ==0)
101+
yylval.str =pstrdup("<>");/* compatability */
102+
else
103+
yylval.str =pstrdup((char*)yytext);
101104
return (Op);
102105
}
103106
{param} { yylval.ival =atoi((char*)&yytext[1]);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp