forked from taozhi8833998/node-sql-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpostgresql.pegjs
More file actions
59 lines (57 loc) · 1.53 KB
/
postgresql.pegjs
File metadata and controls
59 lines (57 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var_decl_list
= head:var_decl tail:(__ COMMA __ var_decl)* {
// => var_decl[]
return createList(head, tail)
}
var_decl
= p:KW_VAR_PRE_DOLLAR_DOUBLE d:[^$]* s:KW_VAR_PRE_DOLLAR_DOUBLE {
// => { type: 'var'; name: string; prefix: string; suffix: string; }
return {
type: 'var',
name: d.join(''),
prefix: '$$',
suffix: '$$'
};
}
/ KW_VAR_PRE_DOLLAR f:column KW_VAR_PRE_DOLLAR d:[^$]* KW_VAR_PRE_DOLLAR s:column !{ if (f !== s) return true } KW_VAR_PRE_DOLLAR {
// => { type: 'var'; name: string; prefix: string; suffix: string; }
return {
type: 'var',
name: d.join(''),
prefix: `$${f}$`,
suffix: `$${s}$`
};
}
/ p:KW_VAR_PRE d: without_prefix_var_decl {
// => without_prefix_var_decl & { type: 'var'; prefix: string; }
// push for analysis
return {
type: 'var',
...d,
prefix: p
};
}
without_prefix_var_decl
= p:'"'? name:ident_name m:mem_chain s:'"'? {
// => { type: 'var'; prefix: string; name: ident_name; members: mem_chain; quoted: string | null }
//push for analysis
if ((p && !s) || (!p && s)) throw new Error('double quoted not match')
varList.push(name);
return {
type: 'var',
name: name,
members: m,
quoted: p && s ? '"' : null,
prefix: null,
};
}
/ n:literal_numeric {
// => { type: 'var'; prefix: null; name: number; members: []; quoted: null }
return {
type: 'var',
name: n.value,
members: [],
quoted: null,
prefix: null,
}
}