7 local _parse_sql_actions
= { [0] =
8 0, 1, 0, 1, 1, 2, 0, 2, 2, 0, 9, 2, 0, 10, 2, 0, 11, 2, 0, 13,
9 2, 1, 2, 2, 1, 6, 3, 0, 3, 4, 3, 0, 3, 5, 3, 0, 3, 7, 3, 0,
10 3, 8, 3, 0, 3, 12, 4, 0, 2, 3, 7, 4, 0, 3, 8, 11
13 local _parse_sql_trans_keys
= { [0] =
14 0, 0, 45, 45, 10, 10, 42, 42, 10, 42, 10, 47, 82, 82,
15 69, 69, 65, 65, 84, 84, 69, 69, 32, 32, 68, 84, 65,
16 65, 84, 84, 65, 65, 66, 66, 65, 65, 83, 83, 69, 69,
17 9, 47, 9, 96, 45, 45, 10, 10, 42, 42, 10, 42, 10, 47,
18 10, 96, 10, 96, 9, 47, 9, 59, 45, 45, 10, 10, 42,
19 42, 10, 42, 10, 47, 65, 65, 66, 66, 76, 76, 69, 69,
20 32, 32, 73, 96, 70, 70, 32, 32, 78, 78, 79, 79, 84, 84,
21 32, 32, 69, 69, 88, 88, 73, 73, 83, 83, 84, 84, 83,
22 83, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 40, 40,
23 10, 10, 32, 41, 32, 32, 75, 96, 69, 69, 89, 89, 32, 32,
24 96, 96, 10, 96, 10, 96, 10, 10, 82, 82, 73, 73, 77,
25 77, 65, 65, 82, 82, 89, 89, 32, 32, 75, 75, 69, 69,
26 89, 89, 32, 32, 78, 78, 73, 73, 81, 81, 85, 85, 69, 69,
27 32, 32, 75, 75, 10, 96, 10, 96, 10, 10, 10, 59, 10,
28 59, 82, 82, 79, 79, 80, 80, 32, 32, 84, 84, 65, 65,
29 66, 66, 76, 76, 69, 69, 32, 32, 73, 73, 70, 70, 32, 32,
30 69, 69, 88, 88, 73, 73, 83, 83, 84, 84, 83, 83, 32,
31 32, 96, 96, 10, 96, 10, 96, 59, 59, 78, 78, 83, 83,
32 69, 69, 82, 82, 84, 84, 32, 32, 73, 73, 78, 78, 84, 84,
33 79, 79, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 40,
34 86, 10, 41, 32, 32, 86, 86, 65, 65, 76, 76, 85, 85,
35 69, 69, 83, 83, 32, 32, 40, 40, 39, 78, 10, 92, 10, 92,
36 41, 44, 44, 59, 32, 78, 48, 57, 41, 57, 48, 57, 41,
37 57, 85, 85, 76, 76, 76, 76, 34, 116, 79, 79, 67, 67,
38 75, 75, 32, 32, 84, 84, 65, 65, 66, 66, 76, 76, 69, 69,
39 83, 83, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 87,
40 87, 82, 82, 73, 73, 84, 84, 69, 69, 69, 69, 84, 84,
41 32, 32, 10, 59, 10, 59, 78, 83, 76, 76, 79, 79, 67, 67,
42 75, 75, 32, 32, 84, 84, 65, 65, 66, 66, 76, 76, 69,
43 69, 83, 83, 69, 69, 9, 85, 0
46 local _parse_sql_key_spans
= { [0] =
47 0, 1, 1, 1, 33, 38, 1, 1, 1, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1,
48 39, 88, 1, 1, 1, 33, 38, 87, 87, 39, 51, 1, 1, 1, 33, 38, 1, 1, 1, 1,
49 1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1,
50 1, 10, 1, 22, 1, 1, 1, 1, 87, 87, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
51 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 50, 50, 1, 1, 1, 1, 1, 1,
52 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1, 1,
53 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 47, 32, 1, 1, 1, 1, 1,
54 1, 1, 1, 1, 40, 83, 83, 4, 16, 47, 10, 17, 10, 17, 1, 1, 1, 83, 1, 1,
55 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1, 1, 1, 1, 1, 1, 1,
56 1, 50, 50, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77
59 local _parse_sql_index_offsets
= { [0] =
60 0, 0, 2, 4, 6, 40, 79, 81, 83, 85, 87, 89, 91, 109, 111, 113, 115, 117, 119, 121,
61 123, 163, 252, 254, 256, 258, 292, 331, 419, 507, 547, 599, 601, 603, 605, 639, 678, 680, 682, 684,
62 686, 688, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 829, 917, 919,
63 921, 923, 934, 936, 959, 961, 963, 965, 967, 1055, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161,
64 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1269, 1357, 1359, 1410, 1461, 1463, 1465, 1467, 1469, 1471,
65 1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1591, 1679, 1681, 1683,
66 1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1701, 1703, 1705, 1793, 1881, 1883, 1931, 1964, 1966, 1968, 1970, 1972,
67 1974, 1976, 1978, 1980, 1982, 2023, 2107, 2191, 2196, 2213, 2261, 2272, 2290, 2301, 2319, 2321, 2323, 2325, 2409, 2411,
68 2413, 2415, 2417, 2419, 2421, 2423, 2425, 2427, 2429, 2431, 2433, 2521, 2609, 2611, 2613, 2615, 2617, 2619, 2621, 2623,
69 2625, 2627, 2678, 2729, 2736, 2738, 2740, 2742, 2744, 2746, 2748, 2750, 2752, 2754, 2756, 2758, 2760
72 local _parse_sql_indicies
= { [0] =
73 0, 1, 2, 0, 3, 1, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
74 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3,
75 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
76 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 6, 3, 7,
77 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1,
78 1, 1, 1, 1, 1, 1, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20,
79 1, 21, 1, 22, 23, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
80 1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24,
81 1, 25, 1, 22, 23, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
82 1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24,
83 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
84 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
85 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 1, 27, 1, 23, 27, 28, 1, 29, 28,
86 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
87 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 28, 29, 28, 28, 28, 28, 28, 28, 28,
88 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
89 28, 28, 28, 28, 30, 28, 28, 28, 28, 22, 28, 32, 31, 31, 31, 31, 31, 31, 31, 31,
90 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
91 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
92 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
93 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 31, 32,
94 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
95 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
96 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
97 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
98 31, 31, 31, 31, 31, 33, 31, 34, 35, 34, 34, 34, 1, 1, 1, 1, 1, 1, 1, 1,
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 1, 1, 1, 36, 1, 37, 1, 34, 35, 34, 34, 34, 1, 1, 1, 1, 1, 1, 1, 1,
101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1,
102 1, 1, 1, 36, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 38,
103 1, 35, 38, 39, 1, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
104 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 40,
105 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
106 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 39, 39, 39, 34, 39, 42, 1,
107 43, 1, 44, 1, 45, 1, 46, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
108 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 49, 1, 50, 1, 51, 1, 52,
109 1, 53, 1, 54, 1, 55, 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 48,
110 1, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
111 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
112 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
113 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
114 62, 62, 62, 62, 62, 62, 62, 1, 62, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
115 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
116 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
117 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
118 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 64, 67, 1, 68,
119 1, 69, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 72, 1, 73, 1, 1, 1,
120 1, 74, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 77,
121 1, 78, 1, 79, 1, 80, 1, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
122 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
123 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
124 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
125 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 81, 82, 81, 81, 81, 81,
126 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
127 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
128 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
129 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
130 81, 83, 81, 69, 83, 84, 1, 85, 1, 86, 1, 87, 1, 88, 1, 89, 1, 90, 1, 91,
131 1, 92, 1, 93, 1, 83, 1, 94, 1, 95, 1, 96, 1, 97, 1, 98, 1, 99, 1, 73,
132 1, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
133 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
134 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
135 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
136 100, 100, 100, 100, 100, 100, 100, 1, 100, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
137 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
138 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
139 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
140 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 102, 105, 83, 106,
141 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
142 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
143 71, 71, 71, 71, 71, 71, 71, 71, 107, 71, 108, 71, 71, 71, 71, 71, 71, 71, 71, 71,
144 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
145 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 107,
146 71, 109, 1, 110, 1, 111, 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118,
147 1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 128,
148 1, 129, 1, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
149 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
150 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
151 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
152 130, 130, 130, 130, 130, 130, 130, 130, 130, 1, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130,
153 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
154 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
155 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
156 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 130, 6,
157 1, 133, 1, 134, 1, 135, 1, 136, 1, 137, 1, 138, 1, 139, 1, 140, 1, 141, 1, 142,
158 1, 143, 1, 144, 1, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
159 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
160 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
161 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
162 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 1, 145, 148, 147, 147, 147, 147, 147, 147,
163 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
164 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
165 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
166 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149,
167 147, 150, 1, 151, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
168 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
169 1, 1, 1, 1, 1, 1, 1, 1, 1, 152, 1, 153, 151, 151, 151, 151, 151, 151, 151, 151,
170 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
171 151, 151, 154, 151, 155, 1, 152, 1, 156, 1, 157, 1, 158, 1, 159, 1, 160, 1, 161, 1,
172 162, 1, 163, 1, 1, 1, 1, 1, 164, 1, 1, 165, 165, 165, 165, 165, 165, 165, 165, 165,
173 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
174 1, 166, 1, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
175 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 167, 167, 167, 167, 167, 167, 167,
176 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
177 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167,
178 167, 167, 167, 167, 167, 170, 167, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
179 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 171, 171, 171,
180 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
181 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
182 171, 171, 171, 171, 171, 171, 171, 171, 171, 174, 171, 175, 1, 1, 176, 1, 161, 1, 1, 1,
183 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 178, 1, 1, 1, 1, 1, 1,
184 163, 1, 1, 1, 1, 1, 164, 1, 1, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 1,
185 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 166,
186 1, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 1, 180, 1, 1, 181, 1, 182, 1, 179,
187 179, 179, 179, 179, 179, 179, 179, 179, 179, 1, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
188 1, 180, 1, 1, 181, 1, 1, 1, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 1, 184,
189 1, 185, 1, 186, 1, 171, 1, 1, 171, 1, 171, 1, 1, 1, 1, 1, 1, 1, 1, 171,
190 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
191 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
192 1, 171, 1, 171, 1, 1, 171, 1, 1, 171, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
193 1, 171, 1, 1, 1, 171, 1, 171, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192,
194 1, 193, 1, 194, 1, 195, 1, 196, 1, 197, 1, 198, 1, 200, 199, 199, 199, 199, 199, 199,
195 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
196 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
197 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
198 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1,
199 199, 200, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
200 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
201 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
202 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199,
203 199, 199, 199, 199, 199, 199, 199, 201, 199, 202, 1, 203, 1, 204, 1, 205, 1, 206, 1, 132,
204 1, 207, 1, 208, 1, 209, 1, 210, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
205 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
206 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 211, 209, 2, 209,
207 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
208 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
209 209, 209, 209, 209, 209, 209, 209, 211, 209, 212, 1, 1, 1, 1, 213, 1, 214, 1, 215, 1,
210 216, 1, 217, 1, 218, 1, 219, 1, 220, 1, 221, 1, 222, 1, 223, 1, 132, 1, 127, 1,
211 6, 2, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
212 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 225, 1,
213 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 226, 227,
214 1, 1, 1, 1, 228, 1, 1, 229, 1, 1, 1, 1, 1, 1, 230, 1, 231, 1, 0
217 local _parse_sql_trans_targs
= { [0] =
218 2, 0, 196, 4, 4, 5, 196, 7, 8, 9, 10, 11, 12, 13, 36, 14, 15, 16, 17, 18,
219 19, 20, 21, 21, 22, 24, 27, 23, 25, 25, 26, 28, 28, 29, 30, 30, 31, 33, 32, 34,
220 34, 35, 37, 38, 39, 40, 41, 42, 56, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
221 54, 55, 57, 57, 57, 57, 58, 59, 60, 61, 62, 92, 63, 64, 71, 82, 89, 65, 66, 67,
222 68, 69, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88,
223 90, 90, 90, 90, 91, 70, 92, 93, 196, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
224 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 116, 117, 119, 120, 121, 122, 123, 124, 125,
225 126, 127, 128, 129, 130, 131, 131, 131, 131, 132, 133, 134, 137, 134, 135, 136, 138, 139, 140, 141,
226 142, 143, 144, 145, 150, 151, 154, 146, 146, 147, 157, 146, 146, 147, 157, 148, 149, 196, 144, 151,
227 148, 149, 152, 153, 155, 156, 147, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
228 171, 172, 173, 174, 175, 176, 177, 179, 180, 181, 181, 182, 184, 195, 185, 186, 187, 188, 189, 190,
229 191, 192, 193, 194, 1, 3, 6, 94, 118, 158, 178, 183
232 local _parse_sql_trans_actions
= { [0] =
233 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
234 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 3, 1, 1, 1, 1,
235 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
236 1, 1, 5, 20, 1, 3, 30, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
237 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
238 5, 20, 1, 3, 26, 3, 3, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
239 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
240 1, 1, 1, 1, 1, 5, 20, 1, 3, 42, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1,
241 1, 1, 11, 1, 5, 5, 1, 5, 20, 46, 5, 1, 3, 34, 1, 14, 1, 17, 1, 1,
242 51, 38, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
243 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
244 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
247 local parse_sql_start
= 196;
248 local parse_sql_first_final
= 196;
249 local parse_sql_error
= 0;
251 local parse_sql_en_main
= 196;
256 local _sql_unescapes
= setmetatable({
268 },{ __index
= function(t
, s
) assert(false, "Unknown escape sequences: "..s
); end });
270 function parse_sql(data
, h
)
272 local pe
= #data
+ 1;
275 local pos_char
, pos_line
= 1, 1;
278 local table_name
, columns
, value_lists
, value_list
, value_count
;
281 cs
= parse_sql_start
;
285 local testEof
= false;
293 local _goto_level
= 0;
295 local _eof_trans
= 15;
297 local _test_eof
= 30;
300 while true do -- goto loop
301 local _continue
= false;
303 local _trigger_goto
= false;
304 if _goto_level
<= 0 then
308 _goto_level
= _test_eof
;
309 _continue
= true; break;
316 _continue
= true; break;
318 end -- _goto_level <= 0
320 if _goto_level
<= _resume
then
321 _keys
= cs
* 2; -- LOCATE_TRANS
322 _inds
= _parse_sql_index_offsets
[cs
];
323 _slen
= _parse_sql_key_spans
[cs
];
326 _parse_sql_trans_keys
[_keys
] <= data
:byte(p
) and
327 data
:byte(p
) <= _parse_sql_trans_keys
[_keys
+ 1] then
328 _trans
= _parse_sql_indicies
[ _inds
+ data
:byte(p
) - _parse_sql_trans_keys
[_keys
] ];
329 else _trans
=_parse_sql_indicies
[ _inds
+ _slen
]; end
331 cs
= _parse_sql_trans_targs
[_trans
];
333 if _parse_sql_trans_actions
[_trans
] ~= 0 then
334 _acts
= _parse_sql_trans_actions
[_trans
];
335 _nacts
= _parse_sql_actions
[_acts
];
341 _tempval
= _parse_sql_actions
[_acts
- 1];
343 -- start action switch
344 if _tempval
== 0 then --4 FROM_STATE_ACTION_SWITCH
345 -- line 34 "sql.rl" -- end of line directive
346 pos_char
= pos_char
+ 1; -- ACTION
347 elseif _tempval
== 1 then --4 FROM_STATE_ACTION_SWITCH
348 -- line 35 "sql.rl" -- end of line directive
349 pos_line
= pos_line
+ 1; pos_char
= 1; -- ACTION
350 elseif _tempval
== 2 then --4 FROM_STATE_ACTION_SWITCH
351 -- line 38 "sql.rl" -- end of line directive
353 elseif _tempval
== 3 then --4 FROM_STATE_ACTION_SWITCH
354 -- line 39 "sql.rl" -- end of line directive
355 token
= data
:sub(mark
, p
-1); -- ACTION
356 elseif _tempval
== 4 then --4 FROM_STATE_ACTION_SWITCH
357 -- line 52 "sql.rl" -- end of line directive
358 table.insert(columns
, token
); columns
[#columns
] = token
; -- ACTION
359 elseif _tempval
== 5 then --4 FROM_STATE_ACTION_SWITCH
360 -- line 58 "sql.rl" -- end of line directive
361 table_name
,columns
= token
,{}; -- ACTION
362 elseif _tempval
== 6 then --4 FROM_STATE_ACTION_SWITCH
363 -- line 59 "sql.rl" -- end of line directive
364 h
.create(table_name
, columns
); -- ACTION
365 elseif _tempval
== 7 then --4 FROM_STATE_ACTION_SWITCH
366 -- line 65 "sql.rl" -- end of line directive
368 value_count
= value_count
+ 1; value_list
[value_count
] = token
:gsub("\\.", _sql_unescapes
);
370 elseif _tempval
== 8 then --4 FROM_STATE_ACTION_SWITCH
371 -- line 68 "sql.rl" -- end of line directive
372 value_count
= value_count
+ 1; value_list
[value_count
] = tonumber(token
); -- ACTION
373 elseif _tempval
== 9 then --4 FROM_STATE_ACTION_SWITCH
374 -- line 69 "sql.rl" -- end of line directive
375 value_count
= value_count
+ 1; -- ACTION
376 elseif _tempval
== 10 then --4 FROM_STATE_ACTION_SWITCH
377 -- line 71 "sql.rl" -- end of line directive
378 value_list
,value_count
= {},0; -- ACTION
379 elseif _tempval
== 11 then --4 FROM_STATE_ACTION_SWITCH
380 -- line 71 "sql.rl" -- end of line directive
381 table.insert(value_lists
, value_list
); -- ACTION
382 elseif _tempval
== 12 then --4 FROM_STATE_ACTION_SWITCH
383 -- line 74 "sql.rl" -- end of line directive
384 table_name
,value_lists
= token
,{}; -- ACTION
385 elseif _tempval
== 13 then --4 FROM_STATE_ACTION_SWITCH
386 -- line 75 "sql.rl" -- end of line directive
387 h
.insert(table_name
, value_lists
); -- ACTION
389 -- line 355 "sql.lua" -- end of line directive
394 if _trigger_goto
then _continue
= true; break; end
397 if _goto_level
<= _again
then
400 _continue
= true; break;
404 _goto_level
= _resume
;
405 _continue
= true; break;
407 end -- _goto_level <= _again
409 if _goto_level
<= _test_eof
then
410 end -- _goto_level <= _test_eof
412 if _goto_level
<= _out
then break; end
415 if not _continue
then break; end
416 end -- endif _goto_level <= out
418 -- end of execute block
421 if cs
< parse_sql_first_final
then
422 print("parse_sql: there was an error, line "..pos_line
.." column "..pos_char
);
424 print("Success. EOF at line "..pos_line
.." column "..pos_char
)
431 package
.path
= package
.path
..";../?.lua;";
433 local my_name
= arg
[0];
434 if my_name
:match("[/\\]") then
435 package
.path
= package
.path
..";"..my_name
:gsub("[^/\\]+$", "../?.lua");
436 package
.cpath
= package
.cpath
..";"..my_name
:gsub("[^/\\]+$", "../?.so");
440 -- ugly workaround for getting datamanager to work outside of prosody :(
442 prosody
.platform
= "unknown";
443 if os
.getenv("WINDIR") then
444 prosody
.platform
= "windows";
445 elseif package
.config
:sub(1,1) == "/" then
446 prosody
.platform
= "_posix";
448 package
.loaded
["util.logger"] = {init
= function() return function() end; end}
450 local dm
= require
"util.datamanager";
451 dm
.set_data_path("data");
453 local datetime
= require
"util.datetime";
455 local st
= require
"util.stanza";
456 local parse_xml
= require
"util.xml".parse
;
458 function store_password(username
, host
, password
)
459 -- create or update account for username@host
460 local ret
, err
= dm
.store(username
, host
, "accounts", {password
= password
});
461 print("["..(err
or "success").."] stored account: "..username
.."@"..host
.." = "..password
);
464 function store_vcard(username
, host
, stanza
)
465 -- create or update vCard for username@host
466 local ret
, err
= dm
.store(username
, host
, "vcard", st
.preserialize(stanza
));
467 print("["..(err
or "success").."] stored vCard: "..username
.."@"..host
);
470 function store_roster(username
, host
, roster_items
)
471 -- fetch current roster-table for username@host if he already has one
472 local roster
= dm
.load(username
, host
, "roster") or {};
473 -- merge imported roster-items with loaded roster
474 for item_tag
in roster_items
:childtags() do
475 -- jid for this roster-item
476 local item_jid
= item_tag
.attr
.jid
477 -- validate item stanzas
478 if (item_tag
.name
== "item") and (item_jid
~= "") then
479 -- prepare roster item
480 -- TODO: is the subscription attribute optional?
481 local item
= {subscription
= item_tag
.attr
.subscription
, groups
= {}};
482 -- optional: give roster item a real name
483 if item_tag
.attr
.name
then
484 item
.name
= item_tag
.attr
.name
;
486 -- optional: iterate over group stanzas inside item stanza
487 for group_tag
in item_tag
:childtags() do
488 local group_name
= group_tag
:get_text();
489 if (group_tag
.name
== "group") and (group_name
~= "") then
490 item
.groups
[group_name
] = true;
492 print("[error] invalid group stanza: "..group_tag
:pretty_print());
495 -- store item in roster
496 roster
[item_jid
] = item
;
497 print("[success] roster entry: " ..username
.."@"..host
.." - "..item_jid
);
499 print("[error] invalid roster stanza: " ..item_tag
:pretty_print());
503 -- store merged roster-table
504 local ret
, err
= dm
.store(username
, host
, "roster", roster
);
505 print("["..(err
or "success").."] stored roster: " ..username
.."@"..host
);
508 function store_subscription_request(username
, host
, presence_stanza
)
509 local from_bare
= presence_stanza
.attr
.from
;
511 -- fetch current roster-table for username@host if he already has one
512 local roster
= dm
.load(username
, host
, "roster") or {};
514 local item
= roster
[from_bare
];
515 if item
and (item
.subscription
== "from" or item
.subscription
== "both") then
516 return; -- already subscribed, do nothing
519 -- add to table of pending subscriptions
520 if not roster
.pending
then roster
.pending
= {}; end
521 roster
.pending
[from_bare
] = true;
523 -- store updated roster-table
524 local ret
, err
= dm
.store(username
, host
, "roster", roster
);
525 print("["..(err
or "success").."] stored subscription request: " ..username
.."@"..host
.." - "..from_bare
);
528 local os_date
= os
.date;
529 local os_time
= os
.time
;
530 local os_difftime
= os
.difftime
;
531 function datetime_parse(s
)
533 local year
, month
, day
, hour
, min, sec
, tzd
;
534 year
, month
, day
, hour
, min, sec
, tzd
= s
:match("^(%d%d%d%d)%-?(%d%d)%-?(%d%d)T(%d%d):(%d%d):(%d%d)%.?%d*([Z+%-]?.*)$");
536 local time_offset
= os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone
537 local tzd_offset
= 0;
538 if tzd
~= "" and tzd
~= "Z" then
539 local sign
, h
, m
= tzd
:match("([+%-])(%d%d):?(%d*)");
540 if not sign
then return; end
541 if #m
~= 2 then m
= "0"; end
542 h
, m
= tonumber(h
), tonumber(m
);
543 tzd_offset
= h
* 60 * 60 + m
* 60;
544 if sign
== "-" then tzd_offset
= -tzd_offset
; end
546 sec
= (sec
+ time_offset
) - tzd_offset
;
547 return os_time({year
=year
, month
=month
, day
=day
, hour
=hour
, min=min, sec
=sec
, isdst
=false});
552 function store_offline_messages(username
, host
, stanza
)
553 -- TODO: maybe use list_load(), append and list_store() instead
554 -- of constantly reopening the file with list_append()?
555 --for ch in offline_messages:childtags() do
556 --print("message :"..ch:pretty_print());
557 stanza
.attr
.node
= nil;
559 local stamp
= stanza
:get_child("x", "jabber:x:delay");
560 if not stamp
or not stamp
.attr
.stamp
then print(2) return; end
562 for i
=1,#stanza
do if stanza
[i
] == stamp
then table.remove(stanza
, i
); break; end end
563 for i
=1,#stanza
.tags
do if stanza
.tags
[i
] == stamp
then table.remove(stanza
.tags
, i
); break; end end
565 local parsed_stamp
= datetime_parse(stamp
.attr
.stamp
);
566 if not parsed_stamp
then print(1, stamp
.attr
.stamp
) return; end
568 stanza
.attr
.stamp
, stanza
.attr
.stamp_legacy
= datetime
.datetime(parsed_stamp
), datetime
.legacy(parsed_stamp
);
569 local ret
, err
= dm
.list_append(username
, host
, "offline", st
.preserialize(stanza
));
570 print("["..(err
or "success").."] stored offline message: " ..username
.."@"..host
.." - "..stanza
.attr
.from
);
576 local help
= "/? -? ? /h -h /help -help --help";
577 if not arg
or help
:find(arg
, 1, true) then
578 print([[XEP-227 importer for Prosody
580 Usage: jabberd14sql2prosody.lua filename.sql
584 local f
= io
.open(arg
);
585 local s
= f
:read("*a");
588 local table_count
= 0;
589 local insert_count
= 0;
593 create
= function(table_name
, columns
)
594 --[[print(table_name);]]
595 table_count
= table_count
+ 1;
597 insert
= function(table_name
, value_lists
)
598 --[[print(table_name, #value_lists);]]
599 insert_count
= insert_count
+ 1;
600 row_count
= row_count
+ #value_lists
;
602 for _
,value_list
in ipairs(value_lists
) do
603 if table_name
== "users" then
604 local user
, realm
, password
= unpack(value_list
);
605 store_password(user
, realm
, password
);
606 elseif table_name
== "roster" then
607 local user
, realm
, xml
= unpack(value_list
);
608 local stanza
,err
= parse_xml(xml
);
610 store_roster(user
, realm
, stanza
);
612 print("[error] roster: XML parsing failed for "..user
.."@"..realm
..": "..err
);
614 elseif table_name
== "vcard" then
615 local user
, realm
, name
, email
, nickname
, birthday
, photo
, xml
= unpack(value_list
);
617 local stanza
,err
= parse_xml(xml
);
619 store_vcard(user
, realm
, stanza
);
621 print("[error] vcard: XML parsing failed for "..user
.."@"..realm
..": "..err
);
624 --print("[warn] vcard: NULL vCard for "..user.."@"..realm..": "..err);
626 elseif table_name
== "storedsubscriptionrequests" then
627 local user
, realm
, fromjid
, xml
= unpack(value_list
);
628 local stanza
,err
= parse_xml(xml
);
630 store_subscription_request(user
, realm
, stanza
);
632 print("[error] storedsubscriptionrequests: XML parsing failed for "..user
.."@"..realm
..": "..err
);
634 elseif table_name
== "messages" then
635 --local user, realm, node, correspondent, type, storetime, delivertime, subject, body, xml = unpack(value_list);
636 local user
, realm
, type, xml
= value_list
[1], value_list
[2], value_list
[5], value_list
[10];
637 if type == "offline" and xml
~= "" then
638 local stanza
,err
= parse_xml(xml
);
640 store_offline_messages(user
, realm
, stanza
);
642 print("[error] offline messages: XML parsing failed for "..user
.."@"..realm
..": "..err
);
643 print(unpack(value_list
));
651 print("table_count", table_count
);
652 print("insert_count", insert_count
);
653 print("row_count", row_count
);