Software /
code /
prosody
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 |