mod_admin_telnet: Don't rely on getpeerchain returning an empty list
[prosody.git] / tools / jabberd14sql2prosody.lua
1 #!/usr/bin/env lua
2
3
4 do
5
6
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
11 };
12
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
44 };
45
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
57 };
58
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
70 };
71
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
215 };
216
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
230 };
231
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
245 };
246
247 local parse_sql_start = 196;
248 local parse_sql_first_final = 196;
249 local parse_sql_error = 0;
250
251 local parse_sql_en_main = 196;
252
253
254
255
256 local _sql_unescapes = setmetatable({
257         ["\\0"] = "\0";
258         ["\\'"] = "'";
259         ["\\\""] = "\"";
260         ["\\b"] = "\b";
261         ["\\n"] = "\n";
262         ["\\r"] = "\r";
263         ["\\t"] = "\t";
264         ["\\Z"] = "\26";
265         ["\\\\"] = "\\";
266         ["\\%"] = "%";
267         ["\\_"] = "_";
268 },{ __index = function(t, s) assert(false, "Unknown escape sequences: "..s); end });
269
270 function parse_sql(data, h)
271         local p = 1;
272         local pe = #data + 1;
273         local cs;
274
275         local pos_char, pos_line = 1, 1;
276
277         local mark, token;
278         local table_name, columns, value_lists, value_list, value_count;
279
280         
281   cs = parse_sql_start;
282
283 --  ragel flat exec
284
285   local testEof = false;
286   local _slen = 0;
287   local _trans = 0;
288   local _keys = 0;
289   local _inds = 0;
290   local _acts = 0;
291   local _nacts = 0;
292   local _tempval = 0;
293   local _goto_level = 0;
294   local _resume = 10;
295   local _eof_trans = 15;
296   local _again = 20;
297   local _test_eof = 30;
298   local _out = 40;
299
300   while true do -- goto loop
301   local _continue = false;
302   repeat
303     local _trigger_goto = false;
304     if _goto_level <= 0 then
305
306 -- noEnd
307       if p == pe then
308         _goto_level = _test_eof;
309         _continue = true; break;
310       end
311
312
313 -- errState != 0
314       if cs == 0 then
315         _goto_level = _out;
316        _continue = true; break;
317       end
318     end -- _goto_level <= 0
319
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];
324
325       if   _slen > 0 and 
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
330
331     cs = _parse_sql_trans_targs[_trans];
332
333     if _parse_sql_trans_actions[_trans] ~= 0 then
334       _acts = _parse_sql_trans_actions[_trans];
335       _nacts = _parse_sql_actions[_acts];
336       _acts = _acts + 1;
337
338       while _nacts > 0 do
339         _nacts = _nacts - 1;
340         _acts = _acts + 1;
341         _tempval = _parse_sql_actions[_acts - 1];
342
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
352        mark = p;       -- ACTION
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
367       
368                         value_count = value_count + 1; value_list[value_count] = token:gsub("\\.", _sql_unescapes);
369                       -- ACTION
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
388         end
389 -- line 355 "sql.lua" -- end of line directive
390     -- end action switch
391       end -- while _nacts
392     end
393
394     if _trigger_goto then _continue = true; break; end
395     end -- endif 
396
397     if _goto_level <= _again then
398       if cs == 0 then
399         _goto_level = _out;
400         _continue = true; break;
401       end
402       p = p + 1;
403       if p ~= pe then
404         _goto_level = _resume;
405         _continue = true; break;
406       end
407     end -- _goto_level <= _again
408
409     if _goto_level <= _test_eof then
410     end -- _goto_level <= _test_eof
411
412     if _goto_level <= _out then break; end
413   _continue = true;
414   until true;
415   if not _continue then break; end
416   end -- endif _goto_level <= out
417
418   -- end of execute block
419
420
421         if cs < parse_sql_first_final then
422                 print("parse_sql: there was an error, line "..pos_line.." column "..pos_char);
423         else
424                 print("Success. EOF at line "..pos_line.." column "..pos_char)
425         end
426 end
427
428 end
429
430 -- import modules
431 package.path = [[C:\Documents and Settings\Waqas\Desktop\mercurial\prosody-hg\?.lua;]]..package.path;
432
433 -- ugly workaround for getting datamanager to work outside of prosody :(
434 prosody = { };
435 prosody.platform = "unknown";
436 if os.getenv("WINDIR") then
437         prosody.platform = "windows";
438 elseif package.config:sub(1,1) == "/" then
439         prosody.platform = "_posix";
440 end
441 package.loaded["util.logger"] = {init = function() return function() end; end}
442
443 local dm = require "util.datamanager";
444 dm.set_data_path("data");
445
446 local datetime = require "util.datetime";
447
448 local st = require "util.stanza";
449 local parse_xml = require "util.xml".parse;
450
451 function store_password(username, host, password)
452         -- create or update account for username@host
453         local ret, err = dm.store(username, host, "accounts", {password = password});
454         print("["..(err or "success").."] stored account: "..username.."@"..host.." = "..password);
455 end
456
457 function store_vcard(username, host, stanza)
458         -- create or update vCard for username@host
459         local ret, err = dm.store(username, host, "vcard", st.preserialize(stanza));
460         print("["..(err or "success").."] stored vCard: "..username.."@"..host);
461 end
462
463 function store_roster(username, host, roster_items)
464         -- fetch current roster-table for username@host if he already has one
465         local roster = dm.load(username, host, "roster") or {};
466         -- merge imported roster-items with loaded roster
467         for item_tag in roster_items:childtags() do
468                 -- jid for this roster-item
469                 local item_jid = item_tag.attr.jid
470                 -- validate item stanzas
471                 if (item_tag.name == "item") and (item_jid ~= "") then
472                         -- prepare roster item
473                         -- TODO: is the subscription attribute optional?
474                         local item = {subscription = item_tag.attr.subscription, groups = {}};
475                         -- optional: give roster item a real name
476                         if item_tag.attr.name then
477                                 item.name = item_tag.attr.name;
478                         end
479                         -- optional: iterate over group stanzas inside item stanza
480                         for group_tag in item_tag:childtags() do
481                                 local group_name = group_tag:get_text();
482                                 if (group_tag.name == "group") and (group_name ~= "") then
483                                         item.groups[group_name] = true;
484                                 else
485                                         print("[error] invalid group stanza: "..group_tag:pretty_print());
486                                 end
487                         end
488                         -- store item in roster
489                         roster[item_jid] = item;
490                         print("[success] roster entry: " ..username.."@"..host.." - "..item_jid);
491                 else
492                         print("[error] invalid roster stanza: " ..item_tag:pretty_print());
493                 end
494
495         end
496         -- store merged roster-table
497         local ret, err = dm.store(username, host, "roster", roster);
498         print("["..(err or "success").."] stored roster: " ..username.."@"..host);
499 end
500
501 function store_subscription_request(username, host, presence_stanza)
502         local from_bare = presence_stanza.attr.from;
503
504         -- fetch current roster-table for username@host if he already has one
505         local roster = dm.load(username, host, "roster") or {};
506
507         local item = roster[from_bare];
508         if item and (item.subscription == "from" or item.subscription == "both") then
509                 return; -- already subscribed, do nothing
510         end
511
512         -- add to table of pending subscriptions
513         if not roster.pending then roster.pending = {}; end
514         roster.pending[from_bare] = true;
515
516         -- store updated roster-table
517         local ret, err = dm.store(username, host, "roster", roster);
518         print("["..(err or "success").."] stored subscription request: " ..username.."@"..host.." - "..from_bare);
519 end
520
521 local os_date = os.date;
522 local os_time = os.time;
523 local os_difftime = os.difftime;
524 function datetime_parse(s)
525         if s then
526                 local year, month, day, hour, min, sec, tzd;
527                 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+%-]?.*)$");
528                 if year then
529                         local time_offset = os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone
530                         local tzd_offset = 0;
531                         if tzd ~= "" and tzd ~= "Z" then
532                                 local sign, h, m = tzd:match("([+%-])(%d%d):?(%d*)");
533                                 if not sign then return; end
534                                 if #m ~= 2 then m = "0"; end
535                                 h, m = tonumber(h), tonumber(m);
536                                 tzd_offset = h * 60 * 60 + m * 60;
537                                 if sign == "-" then tzd_offset = -tzd_offset; end
538                         end
539                         sec = (sec + time_offset) - tzd_offset;
540                         return os_time({year=year, month=month, day=day, hour=hour, min=min, sec=sec, isdst=false});
541                 end
542         end
543 end
544
545 function store_offline_messages(username, host, stanza)
546         -- TODO: maybe use list_load(), append and list_store() instead
547         --       of constantly reopening the file with list_append()?
548         --for ch in offline_messages:childtags() do
549                 --print("message :"..ch:pretty_print());
550                 stanza.attr.node = nil;
551
552                 local stamp = stanza:get_child("x", "jabber:x:delay");
553                 if not stamp or not stamp.attr.stamp then print(2) return; end
554
555                 for i=1,#stanza do if stanza[i] == stamp then table.remove(stanza, i); break; end end
556                 for i=1,#stanza.tags do if stanza.tags[i] == stamp then table.remove(stanza.tags, i); break; end end
557
558                 local parsed_stamp = datetime_parse(stamp.attr.stamp);
559                 if not parsed_stamp then print(1, stamp.attr.stamp) return; end
560
561                 stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(parsed_stamp), datetime.legacy(parsed_stamp);
562                 local ret, err = dm.list_append(username, host, "offline", st.preserialize(stanza));
563                 print("["..(err or "success").."] stored offline message: " ..username.."@"..host.." - "..stanza.attr.from);
564         --end
565 end
566
567 -- load data
568 local arg = ...;
569 local help = "/? -? ? /h -h /help -help --help";
570 if not arg or help:find(arg, 1, true) then
571         print([[XEP-227 importer for Prosody
572
573   Usage: jabberd14sql2prosody.lua filename.sql
574 ]]);
575         os.exit(1);
576 end
577 local f = io.open(arg);
578 local s = f:read("*a");
579 f:close();
580
581 local table_count = 0;
582 local insert_count = 0;
583 local row_count = 0;
584 -- parse
585 parse_sql(s, {
586         create = function(table_name, columns)
587                 --[[print(table_name);]]
588                 table_count = table_count + 1;
589         end;
590         insert = function(table_name, value_lists)
591                 --[[print(table_name, #value_lists);]]
592                 insert_count = insert_count + 1;
593                 row_count = row_count + #value_lists;
594
595                 for _,value_list in ipairs(value_lists) do
596                         if table_name == "users" then
597                                 local user, realm, password = unpack(value_list);
598                                 store_password(user, realm, password);
599                         elseif table_name == "roster" then
600                                 local user, realm, xml = unpack(value_list);
601                                 local stanza,err = parse_xml(xml);
602                                 if stanza then
603                                         store_roster(user, realm, stanza);
604                                 else
605                                         print("[error] roster: XML parsing failed for "..user.."@"..realm..": "..err);
606                                 end
607                         elseif table_name == "vcard" then
608                                 local user, realm, name, email, nickname, birthday, photo, xml = unpack(value_list);
609                                 if xml then
610                                         local stanza,err = parse_xml(xml);
611                                         if stanza then
612                                                 store_vcard(user, realm, stanza);
613                                         else
614                                                 print("[error] vcard: XML parsing failed for "..user.."@"..realm..": "..err);
615                                         end
616                                 else
617                                         --print("[warn] vcard: NULL vCard for "..user.."@"..realm..": "..err);
618                                 end
619                         elseif table_name == "storedsubscriptionrequests" then
620                                 local user, realm, fromjid, xml = unpack(value_list);
621                                 local stanza,err = parse_xml(xml);
622                                 if stanza then
623                                         store_subscription_request(user, realm, stanza);
624                                 else
625                                         print("[error] storedsubscriptionrequests: XML parsing failed for "..user.."@"..realm..": "..err);
626                                 end
627                         elseif table_name == "messages" then
628                                 --local user, realm, node, correspondent, type, storetime, delivertime, subject, body, xml = unpack(value_list);
629                                 local user, realm, type, xml = value_list[1], value_list[2], value_list[5], value_list[10];
630                                 if type == "offline" and xml ~= "" then
631                                         local stanza,err = parse_xml(xml);
632                                         if stanza then
633                                                 store_offline_messages(user, realm, stanza);
634                                         else
635                                                 print("[error] offline messages: XML parsing failed for "..user.."@"..realm..": "..err);
636                                                 print(unpack(value_list));
637                                         end
638                                 end
639                         end
640                 end
641         end;
642 });
643
644 print("table_count", table_count);
645 print("insert_count", insert_count);
646 print("row_count", row_count);
647