Comparison

tools/jabberd14sql2prosody.lua @ 5109:12fb961c8f27

tools/jabberd14sql2prosody: Initial commit. Accounts, rosters, vCards, subscriptions and offline messages supported (thanks halfdan for all the testing).
author Waqas Hussain <waqas20@gmail.com>
date Tue, 28 Aug 2012 05:52:30 +0500
child 5216:63db6f281708
comparison
equal deleted inserted replaced
5108:022123451e52 5109:12fb961c8f27
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 lxp = require "lxp";
449 local st = require "util.stanza";
450
451 local parse_xml = (function()
452 local ns_prefixes = {
453 ["http://www.w3.org/XML/1998/namespace"] = "xml";
454 };
455 local ns_separator = "\1";
456 local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
457 return function(xml)
458 local handler = {};
459 local stanza = st.stanza("root");
460 function handler:StartElement(tagname, attr)
461 local curr_ns,name = tagname:match(ns_pattern);
462 if name == "" then
463 curr_ns, name = "", curr_ns;
464 end
465 if curr_ns ~= "" then
466 attr.xmlns = curr_ns;
467 end
468 for i=1,#attr do
469 local k = attr[i];
470 attr[i] = nil;
471 local ns, nm = k:match(ns_pattern);
472 if nm ~= "" then
473 ns = ns_prefixes[ns];
474 if ns then
475 attr[ns..":"..nm] = attr[k];
476 attr[k] = nil;
477 end
478 end
479 end
480 stanza:tag(name, attr);
481 end
482 function handler:CharacterData(data)
483 stanza:text(data);
484 end
485 function handler:EndElement(tagname)
486 stanza:up();
487 end
488 local parser = lxp.new(handler, "\1");
489 local ok, err, line, col = parser:parse(xml);
490 if ok then ok, err, line, col = parser:parse(); end
491 --parser:close();
492 if ok then
493 return stanza.tags[1];
494 else
495 return ok, err.." (line "..line..", col "..col..")";
496 end
497 end;
498 end)();
499
500 function store_password(username, host, password)
501 -- create or update account for username@host
502 local ret, err = dm.store(username, host, "accounts", {password = password});
503 print("["..(err or "success").."] stored account: "..username.."@"..host.." = "..password);
504 end
505
506 function store_vcard(username, host, stanza)
507 -- create or update vCard for username@host
508 local ret, err = dm.store(username, host, "vcard", st.preserialize(stanza));
509 print("["..(err or "success").."] stored vCard: "..username.."@"..host);
510 end
511
512 function store_roster(username, host, roster_items)
513 -- fetch current roster-table for username@host if he already has one
514 local roster = dm.load(username, host, "roster") or {};
515 -- merge imported roster-items with loaded roster
516 for item_tag in roster_items:childtags() do
517 -- jid for this roster-item
518 local item_jid = item_tag.attr.jid
519 -- validate item stanzas
520 if (item_tag.name == "item") and (item_jid ~= "") then
521 -- prepare roster item
522 -- TODO: is the subscription attribute optional?
523 local item = {subscription = item_tag.attr.subscription, groups = {}};
524 -- optional: give roster item a real name
525 if item_tag.attr.name then
526 item.name = item_tag.attr.name;
527 end
528 -- optional: iterate over group stanzas inside item stanza
529 for group_tag in item_tag:childtags() do
530 local group_name = group_tag:get_text();
531 if (group_tag.name == "group") and (group_name ~= "") then
532 item.groups[group_name] = true;
533 else
534 print("[error] invalid group stanza: "..group_tag:pretty_print());
535 end
536 end
537 -- store item in roster
538 roster[item_jid] = item;
539 print("[success] roster entry: " ..username.."@"..host.." - "..item_jid);
540 else
541 print("[error] invalid roster stanza: " ..item_tag:pretty_print());
542 end
543
544 end
545 -- store merged roster-table
546 local ret, err = dm.store(username, host, "roster", roster);
547 print("["..(err or "success").."] stored roster: " ..username.."@"..host);
548 end
549
550 function store_subscription_request(username, host, presence_stanza)
551 local from_bare = presence_stanza.attr.from;
552
553 -- fetch current roster-table for username@host if he already has one
554 local roster = dm.load(username, host, "roster") or {};
555
556 local item = roster[from_bare];
557 if item and (item.subscription == "from" or item.subscription == "both") then
558 return; -- already subscribed, do nothing
559 end
560
561 -- add to table of pending subscriptions
562 if not roster.pending then roster.pending = {}; end
563 roster.pending[from_bare] = true;
564
565 -- store updated roster-table
566 local ret, err = dm.store(username, host, "roster", roster);
567 print("["..(err or "success").."] stored subscription request: " ..username.."@"..host.." - "..from_bare);
568 end
569
570 local os_date = os.date;
571 local os_time = os.time;
572 local os_difftime = os.difftime;
573 function datetime_parse(s)
574 if s then
575 local year, month, day, hour, min, sec, tzd;
576 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+%-]?.*)$");
577 if year then
578 local time_offset = os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone
579 local tzd_offset = 0;
580 if tzd ~= "" and tzd ~= "Z" then
581 local sign, h, m = tzd:match("([+%-])(%d%d):?(%d*)");
582 if not sign then return; end
583 if #m ~= 2 then m = "0"; end
584 h, m = tonumber(h), tonumber(m);
585 tzd_offset = h * 60 * 60 + m * 60;
586 if sign == "-" then tzd_offset = -tzd_offset; end
587 end
588 sec = (sec + time_offset) - tzd_offset;
589 return os_time({year=year, month=month, day=day, hour=hour, min=min, sec=sec, isdst=false});
590 end
591 end
592 end
593
594 function store_offline_messages(username, host, stanza)
595 -- TODO: maybe use list_load(), append and list_store() instead
596 -- of constantly reopening the file with list_append()?
597 --for ch in offline_messages:childtags() do
598 --print("message :"..ch:pretty_print());
599 stanza.attr.node = nil;
600
601 local stamp = stanza:get_child("x", "jabber:x:delay");
602 if not stamp or not stamp.attr.stamp then print(2) return; end
603
604 for i=1,#stanza do if stanza[i] == stamp then table.remove(stanza, i); break; end end
605 for i=1,#stanza.tags do if stanza.tags[i] == stamp then table.remove(stanza.tags, i); break; end end
606
607 local parsed_stamp = datetime_parse(stamp.attr.stamp);
608 if not parsed_stamp then print(1, stamp.attr.stamp) return; end
609
610 stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(parsed_stamp), datetime.legacy(parsed_stamp);
611 local ret, err = dm.list_append(username, host, "offline", st.preserialize(stanza));
612 print("["..(err or "success").."] stored offline message: " ..username.."@"..host.." - "..stanza.attr.from);
613 --end
614 end
615
616 -- load data
617 local arg = ...;
618 local help = "/? -? ? /h -h /help -help --help";
619 if not arg or help:find(arg, 1, true) then
620 print([[XEP-227 importer for Prosody
621
622 Usage: jabberd14sql2prosody.lua filename.sql
623 ]]);
624 os.exit(1);
625 end
626 local f = io.open(arg);
627 local s = f:read("*a");
628 f:close();
629
630 local table_count = 0;
631 local insert_count = 0;
632 local row_count = 0;
633 -- parse
634 parse_sql(s, {
635 create = function(table_name, columns)
636 --[[print(table_name);]]
637 table_count = table_count + 1;
638 end;
639 insert = function(table_name, value_lists)
640 --[[print(table_name, #value_lists);]]
641 insert_count = insert_count + 1;
642 row_count = row_count + #value_lists;
643
644 for _,value_list in ipairs(value_lists) do
645 if table_name == "users" then
646 local user, realm, password = unpack(value_list);
647 store_password(user, realm, password);
648 elseif table_name == "roster" then
649 local user, realm, xml = unpack(value_list);
650 local stanza,err = parse_xml(xml);
651 if stanza then
652 store_roster(user, realm, stanza);
653 else
654 print("[error] roster: XML parsing failed for "..user.."@"..realm..": "..err);
655 end
656 elseif table_name == "vcard" then
657 local user, realm, name, email, nickname, birthday, photo, xml = unpack(value_list);
658 if xml then
659 local stanza,err = parse_xml(xml);
660 if stanza then
661 store_vcard(user, realm, stanza);
662 else
663 print("[error] vcard: XML parsing failed for "..user.."@"..realm..": "..err);
664 end
665 else
666 --print("[warn] vcard: NULL vCard for "..user.."@"..realm..": "..err);
667 end
668 elseif table_name == "storedsubscriptionrequests" then
669 local user, realm, fromjid, xml = unpack(value_list);
670 local stanza,err = parse_xml(xml);
671 if stanza then
672 store_subscription_request(user, realm, stanza);
673 else
674 print("[error] storedsubscriptionrequests: XML parsing failed for "..user.."@"..realm..": "..err);
675 end
676 elseif table_name == "messages" then
677 --local user, realm, node, correspondent, type, storetime, delivertime, subject, body, xml = unpack(value_list);
678 local user, realm, type, xml = value_list[1], value_list[2], value_list[5], value_list[10];
679 if type == "offline" and xml ~= "" then
680 local stanza,err = parse_xml(xml);
681 if stanza then
682 store_offline_messages(user, realm, stanza);
683 else
684 print("[error] offline messages: XML parsing failed for "..user.."@"..realm..": "..err);
685 print(unpack(value_list));
686 end
687 end
688 end
689 end
690 end;
691 });
692
693 print("table_count", table_count);
694 print("insert_count", insert_count);
695 print("row_count", row_count);
696