~drizzle-trunk/drizzle/development

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
query:
	select | insert | update | delete ;

select:
	SELECT select_list FROM _table where_clause |
	SELECT column_delete FROM _table where_clause ;

select_list:
	select_item |
	select_item , select_list ;

select_item:
	column |
	column_delete |
	column_exists |
	column_list ;

insert:
	INSERT INTO _table SET insert_list ;

update:
	UPDATE _table SET column_name = column where_clause ORDER BY pk LIMIT 1;

delete:
	DELETE FROM _table where_clause ORDER BY pk LIMIT 1 ;

where_clause:
	WHERE where_expr |
	WHERE where_expr and_or where_expr ;

and_or:
	AND | OR ;

not:
	| NOT ;

where_expr:
	not column_exists |
	not column = column |
	not column_get comp_op value |
	column_get IS not NULL ;

comp_op:
	= | < | > | <= | >= | != | <> | <=> ;

insert_list:
	column_name = column_create |
	column_name = column_create , insert_list ;

column:
	column_name |
	column_create |
	column_add ;

column_create:
	COLUMN_CREATE( column_number_value_list );

column_add:
	COLUMN_ADD( column , column_number_value_list );

column_delete:
	COLUMN_DELETE( column , column_number );

column_get:
	COLUMN_GET( column , column_number AS type );

column_exists:
	COLUMN_EXISTS( column , column_number );

column_list:
	COLUMN_LIST( column );

column_number_value_list:
	column_number_value |
	column_number_value , column_number_value ;

column_number_value:
	column_number , column_value ;

column_number:
	_digit | _tinyint_unsigned ;

column_value:
	value |
	value AS type ;

value:
	column_get | _digit | _varchar(1) | _varchar(512) | _tinyint_unsigned | NULL ;

type:
	BINARY | BINARY( width ) |
	CHAR |
#	CHAR( width ) |
	DATE |	# bug 778905
	DATETIME |
#	DATETIME( time_precision ) |	# requires millisecond precision
#	DECIMAL | DECIMAL( precision ) | DECIMAL( precision , scale ) |
	DOUBLE | 
	INTEGER |
#	SIGNED INTEGER |
	TIME ;
#	TIME( time_precision ) 		# requires millisecond precision
#	UNSIGNED INTEGER ;

width:
	_digit | _tinyint_unsigned ;

time_precision:
	0 | 3 | 6 ;
	
precision:
	5 | 6 | 7 | 8 | 9;

scale:
	1 | 2 | 3 | 4 ;

column_name:
	_field_no_pk ;