Changeset

5119:d868ce990838

Merge 0.9->trunk
author Waqas Hussain <waqas20@gmail.com>
date Wed, 12 Sep 2012 22:03:57 +0500
parents 5114:4c2c04a49938 (diff) 5118:0dc9e6c128c3 (current diff)
children 5120:bcabea740c00
files
diffstat 2 files changed, 849 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/jabberd14sql2prosody.lua	Wed Sep 12 22:03:57 2012 +0500
@@ -0,0 +1,696 @@
+#!/usr/bin/env lua
+
+
+do
+
+
+local _parse_sql_actions = { [0] =
+  0, 1, 0, 1, 1, 2, 0, 2, 2, 0, 9, 2, 0, 10, 2, 0, 11, 2, 0, 13, 
+  2, 1, 2, 2, 1, 6, 3, 0, 3, 4, 3, 0, 3, 5, 3, 0, 3, 7, 3, 0, 
+  3, 8, 3, 0, 3, 12, 4, 0, 2, 3, 7, 4, 0, 3, 8, 11
+};
+
+local _parse_sql_trans_keys = { [0] =
+  0, 0, 45, 45, 10, 10, 42, 42, 10, 42, 10, 47, 82, 82, 
+  69, 69, 65, 65, 84, 84, 69, 69, 32, 32, 68, 84, 65, 
+  65, 84, 84, 65, 65, 66, 66, 65, 65, 83, 83, 69, 69, 
+  9, 47, 9, 96, 45, 45, 10, 10, 42, 42, 10, 42, 10, 47, 
+  10, 96, 10, 96, 9, 47, 9, 59, 45, 45, 10, 10, 42, 
+  42, 10, 42, 10, 47, 65, 65, 66, 66, 76, 76, 69, 69, 
+  32, 32, 73, 96, 70, 70, 32, 32, 78, 78, 79, 79, 84, 84, 
+  32, 32, 69, 69, 88, 88, 73, 73, 83, 83, 84, 84, 83, 
+  83, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 40, 40, 
+  10, 10, 32, 41, 32, 32, 75, 96, 69, 69, 89, 89, 32, 32, 
+  96, 96, 10, 96, 10, 96, 10, 10, 82, 82, 73, 73, 77, 
+  77, 65, 65, 82, 82, 89, 89, 32, 32, 75, 75, 69, 69, 
+  89, 89, 32, 32, 78, 78, 73, 73, 81, 81, 85, 85, 69, 69, 
+  32, 32, 75, 75, 10, 96, 10, 96, 10, 10, 10, 59, 10, 
+  59, 82, 82, 79, 79, 80, 80, 32, 32, 84, 84, 65, 65, 
+  66, 66, 76, 76, 69, 69, 32, 32, 73, 73, 70, 70, 32, 32, 
+  69, 69, 88, 88, 73, 73, 83, 83, 84, 84, 83, 83, 32, 
+  32, 96, 96, 10, 96, 10, 96, 59, 59, 78, 78, 83, 83, 
+  69, 69, 82, 82, 84, 84, 32, 32, 73, 73, 78, 78, 84, 84, 
+  79, 79, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 40, 
+  86, 10, 41, 32, 32, 86, 86, 65, 65, 76, 76, 85, 85, 
+  69, 69, 83, 83, 32, 32, 40, 40, 39, 78, 10, 92, 10, 92, 
+  41, 44, 44, 59, 32, 78, 48, 57, 41, 57, 48, 57, 41, 
+  57, 85, 85, 76, 76, 76, 76, 34, 116, 79, 79, 67, 67, 
+  75, 75, 32, 32, 84, 84, 65, 65, 66, 66, 76, 76, 69, 69, 
+  83, 83, 32, 32, 96, 96, 10, 96, 10, 96, 32, 32, 87, 
+  87, 82, 82, 73, 73, 84, 84, 69, 69, 69, 69, 84, 84, 
+  32, 32, 10, 59, 10, 59, 78, 83, 76, 76, 79, 79, 67, 67, 
+  75, 75, 32, 32, 84, 84, 65, 65, 66, 66, 76, 76, 69, 
+  69, 83, 83, 69, 69, 9, 85, 0
+};
+
+local _parse_sql_key_spans = { [0] =
+  0, 1, 1, 1, 33, 38, 1, 1, 1, 1, 1, 1, 17, 1, 1, 1, 1, 1, 1, 1, 
+  39, 88, 1, 1, 1, 33, 38, 87, 87, 39, 51, 1, 1, 1, 33, 38, 1, 1, 1, 1, 
+  1, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1, 
+  1, 10, 1, 22, 1, 1, 1, 1, 87, 87, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 50, 50, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 47, 32, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 40, 83, 83, 4, 16, 47, 10, 17, 10, 17, 1, 1, 1, 83, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 87, 87, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 50, 50, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77
+};
+
+local _parse_sql_index_offsets = { [0] =
+  0, 0, 2, 4, 6, 40, 79, 81, 83, 85, 87, 89, 91, 109, 111, 113, 115, 117, 119, 121, 
+  123, 163, 252, 254, 256, 258, 292, 331, 419, 507, 547, 599, 601, 603, 605, 639, 678, 680, 682, 684, 
+  686, 688, 713, 715, 717, 719, 721, 723, 725, 727, 729, 731, 733, 735, 737, 739, 741, 829, 917, 919, 
+  921, 923, 934, 936, 959, 961, 963, 965, 967, 1055, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 
+  1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1269, 1357, 1359, 1410, 1461, 1463, 1465, 1467, 1469, 1471, 
+  1473, 1475, 1477, 1479, 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1591, 1679, 1681, 1683, 
+  1685, 1687, 1689, 1691, 1693, 1695, 1697, 1699, 1701, 1703, 1705, 1793, 1881, 1883, 1931, 1964, 1966, 1968, 1970, 1972, 
+  1974, 1976, 1978, 1980, 1982, 2023, 2107, 2191, 2196, 2213, 2261, 2272, 2290, 2301, 2319, 2321, 2323, 2325, 2409, 2411, 
+  2413, 2415, 2417, 2419, 2421, 2423, 2425, 2427, 2429, 2431, 2433, 2521, 2609, 2611, 2613, 2615, 2617, 2619, 2621, 2623, 
+  2625, 2627, 2678, 2729, 2736, 2738, 2740, 2742, 2744, 2746, 2748, 2750, 2752, 2754, 2756, 2758, 2760
+};
+
+local _parse_sql_indicies = { [0] =
+  0, 1, 2, 0, 3, 1, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
+  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 
+  4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
+  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 6, 3, 7, 
+  1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 
+  1, 21, 1, 22, 23, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 
+  1, 25, 1, 22, 23, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24, 
+  1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 26, 1, 27, 1, 23, 27, 28, 1, 29, 28, 
+  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 
+  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 28, 29, 28, 28, 28, 28, 28, 28, 28, 
+  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 
+  28, 28, 28, 28, 30, 28, 28, 28, 28, 22, 28, 32, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 1, 31, 32, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 
+  31, 31, 31, 31, 31, 33, 31, 34, 35, 34, 34, 34, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 36, 1, 37, 1, 34, 35, 34, 34, 34, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 36, 1, 37, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 38, 
+  1, 35, 38, 39, 1, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 
+  39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 40, 
+  39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 
+  39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 41, 39, 39, 39, 39, 34, 39, 42, 1, 
+  43, 1, 44, 1, 45, 1, 46, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 1, 49, 1, 50, 1, 51, 1, 52, 
+  1, 53, 1, 54, 1, 55, 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 48, 
+  1, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 
+  62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 
+  62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 
+  62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 
+  62, 62, 62, 62, 62, 62, 62, 1, 62, 65, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+  64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+  64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+  64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
+  64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 64, 67, 1, 68, 
+  1, 69, 1, 70, 1, 1, 1, 1, 1, 1, 1, 1, 71, 1, 72, 1, 73, 1, 1, 1, 
+  1, 74, 1, 1, 1, 1, 75, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 77, 
+  1, 78, 1, 79, 1, 80, 1, 82, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 1, 81, 82, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 
+  81, 83, 81, 69, 83, 84, 1, 85, 1, 86, 1, 87, 1, 88, 1, 89, 1, 90, 1, 91, 
+  1, 92, 1, 93, 1, 83, 1, 94, 1, 95, 1, 96, 1, 97, 1, 98, 1, 99, 1, 73, 
+  1, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
+  100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
+  100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
+  100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
+  100, 100, 100, 100, 100, 100, 100, 1, 100, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 
+  102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 
+  102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 
+  102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 
+  102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 102, 105, 83, 106, 
+  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+  71, 71, 71, 71, 71, 71, 71, 71, 107, 71, 108, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 
+  71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 107, 
+  71, 109, 1, 110, 1, 111, 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 
+  1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 128, 
+  1, 129, 1, 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 1, 130, 131, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 
+  130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 130, 6, 
+  1, 133, 1, 134, 1, 135, 1, 136, 1, 137, 1, 138, 1, 139, 1, 140, 1, 141, 1, 142, 
+  1, 143, 1, 144, 1, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 
+  145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 
+  145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 
+  145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 
+  145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 1, 145, 148, 147, 147, 147, 147, 147, 147, 
+  147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 
+  147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 
+  147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 
+  147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 149, 
+  147, 150, 1, 151, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 152, 1, 153, 151, 151, 151, 151, 151, 151, 151, 151, 
+  151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 
+  151, 151, 154, 151, 155, 1, 152, 1, 156, 1, 157, 1, 158, 1, 159, 1, 160, 1, 161, 1, 
+  162, 1, 163, 1, 1, 1, 1, 1, 164, 1, 1, 165, 165, 165, 165, 165, 165, 165, 165, 165, 
+  165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 166, 1, 168, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 
+  167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 169, 167, 167, 167, 167, 167, 167, 167, 
+  167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 
+  167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 
+  167, 167, 167, 167, 167, 170, 167, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 
+  171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 171, 171, 171, 
+  171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 
+  171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 
+  171, 171, 171, 171, 171, 171, 171, 171, 171, 174, 171, 175, 1, 1, 176, 1, 161, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 178, 1, 1, 1, 1, 1, 1, 
+  163, 1, 1, 1, 1, 1, 164, 1, 1, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 166, 
+  1, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 1, 180, 1, 1, 181, 1, 182, 1, 179, 
+  179, 179, 179, 179, 179, 179, 179, 179, 179, 1, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 
+  1, 180, 1, 1, 181, 1, 1, 1, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 1, 184, 
+  1, 185, 1, 186, 1, 171, 1, 1, 171, 1, 171, 1, 1, 1, 1, 1, 1, 1, 1, 171, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 171, 1, 171, 1, 1, 171, 1, 1, 171, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 171, 1, 1, 1, 171, 1, 171, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, 
+  1, 193, 1, 194, 1, 195, 1, 196, 1, 197, 1, 198, 1, 200, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 1, 
+  199, 200, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 
+  199, 199, 199, 199, 199, 199, 199, 201, 199, 202, 1, 203, 1, 204, 1, 205, 1, 206, 1, 132, 
+  1, 207, 1, 208, 1, 209, 1, 210, 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, 209, 209, 209, 209, 
+  209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 211, 209, 2, 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, 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, 
+  216, 1, 217, 1, 218, 1, 219, 1, 220, 1, 221, 1, 222, 1, 223, 1, 132, 1, 127, 1, 
+  6, 2, 6, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 224, 1, 225, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 226, 227, 
+  1, 1, 1, 1, 228, 1, 1, 229, 1, 1, 1, 1, 1, 1, 230, 1, 231, 1, 0
+};
+
+local _parse_sql_trans_targs = { [0] =
+  2, 0, 196, 4, 4, 5, 196, 7, 8, 9, 10, 11, 12, 13, 36, 14, 15, 16, 17, 18, 
+  19, 20, 21, 21, 22, 24, 27, 23, 25, 25, 26, 28, 28, 29, 30, 30, 31, 33, 32, 34, 
+  34, 35, 37, 38, 39, 40, 41, 42, 56, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 
+  54, 55, 57, 57, 57, 57, 58, 59, 60, 61, 62, 92, 63, 64, 71, 82, 89, 65, 66, 67, 
+  68, 69, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 
+  90, 90, 90, 90, 91, 70, 92, 93, 196, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 
+  106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 116, 117, 119, 120, 121, 122, 123, 124, 125, 
+  126, 127, 128, 129, 130, 131, 131, 131, 131, 132, 133, 134, 137, 134, 135, 136, 138, 139, 140, 141, 
+  142, 143, 144, 145, 150, 151, 154, 146, 146, 147, 157, 146, 146, 147, 157, 148, 149, 196, 144, 151, 
+  148, 149, 152, 153, 155, 156, 147, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 
+  171, 172, 173, 174, 175, 176, 177, 179, 180, 181, 181, 182, 184, 195, 185, 186, 187, 188, 189, 190, 
+  191, 192, 193, 194, 1, 3, 6, 94, 118, 158, 178, 183
+};
+
+local _parse_sql_trans_actions = { [0] =
+  1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 
+  3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 5, 20, 1, 3, 30, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  5, 20, 1, 3, 26, 3, 3, 1, 23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 5, 20, 1, 3, 42, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 
+  1, 1, 11, 1, 5, 5, 1, 5, 20, 46, 5, 1, 3, 34, 1, 14, 1, 17, 1, 1, 
+  51, 38, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+local parse_sql_start = 196;
+local parse_sql_first_final = 196;
+local parse_sql_error = 0;
+
+local parse_sql_en_main = 196;
+
+
+
+
+local _sql_unescapes = setmetatable({
+	["\\0"] = "\0";
+	["\\'"] = "'";
+	["\\\""] = "\"";
+	["\\b"] = "\b";
+	["\\n"] = "\n";
+	["\\r"] = "\r";
+	["\\t"] = "\t";
+	["\\Z"] = "\26";
+	["\\\\"] = "\\";
+	["\\%"] = "%";
+	["\\_"] = "_";
+},{ __index = function(t, s) assert(false, "Unknown escape sequences: "..s); end });
+
+function parse_sql(data, h)
+	local p = 1;
+	local pe = #data + 1;
+	local cs;
+
+	local pos_char, pos_line = 1, 1;
+
+	local mark, token;
+	local table_name, columns, value_lists, value_list, value_count;
+
+	
+  cs = parse_sql_start;
+
+--  ragel flat exec
+
+  local testEof = false;
+  local _slen = 0;
+  local _trans = 0;
+  local _keys = 0;
+  local _inds = 0;
+  local _acts = 0;
+  local _nacts = 0;
+  local _tempval = 0;
+  local _goto_level = 0;
+  local _resume = 10;
+  local _eof_trans = 15;
+  local _again = 20;
+  local _test_eof = 30;
+  local _out = 40;
+
+  while true do -- goto loop
+  local _continue = false;
+  repeat
+    local _trigger_goto = false;
+    if _goto_level <= 0 then
+
+-- noEnd
+      if p == pe then
+        _goto_level = _test_eof;
+        _continue = true; break;
+      end
+
+
+-- errState != 0
+      if cs == 0 then
+        _goto_level = _out;
+       _continue = true; break;
+      end
+    end -- _goto_level <= 0
+
+     if _goto_level <= _resume then
+      _keys = cs * 2; -- LOCATE_TRANS
+      _inds = _parse_sql_index_offsets[cs];
+      _slen = _parse_sql_key_spans[cs];
+
+      if   _slen > 0 and 
+         _parse_sql_trans_keys[_keys] <= data:byte(p) and 
+         data:byte(p) <= _parse_sql_trans_keys[_keys + 1] then 
+        _trans = _parse_sql_indicies[ _inds + data:byte(p) - _parse_sql_trans_keys[_keys] ]; 
+      else _trans =_parse_sql_indicies[ _inds + _slen ]; end
+
+    cs = _parse_sql_trans_targs[_trans];
+
+    if _parse_sql_trans_actions[_trans] ~= 0 then
+      _acts = _parse_sql_trans_actions[_trans];
+      _nacts = _parse_sql_actions[_acts];
+      _acts = _acts + 1;
+
+      while _nacts > 0 do
+        _nacts = _nacts - 1;
+        _acts = _acts + 1;
+        _tempval = _parse_sql_actions[_acts - 1];
+
+     -- start action switch
+        if _tempval  == 0 then --4 FROM_STATE_ACTION_SWITCH
+-- line 34 "sql.rl" -- end of line directive
+       pos_char = pos_char + 1;       -- ACTION
+        elseif _tempval  == 1 then --4 FROM_STATE_ACTION_SWITCH
+-- line 35 "sql.rl" -- end of line directive
+       pos_line = pos_line + 1; pos_char = 1;       -- ACTION
+        elseif _tempval  == 2 then --4 FROM_STATE_ACTION_SWITCH
+-- line 38 "sql.rl" -- end of line directive
+       mark = p;       -- ACTION
+        elseif _tempval  == 3 then --4 FROM_STATE_ACTION_SWITCH
+-- line 39 "sql.rl" -- end of line directive
+       token = data:sub(mark, p-1);       -- ACTION
+        elseif _tempval  == 4 then --4 FROM_STATE_ACTION_SWITCH
+-- line 52 "sql.rl" -- end of line directive
+       table.insert(columns, token); columns[#columns] = token;       -- ACTION
+        elseif _tempval  == 5 then --4 FROM_STATE_ACTION_SWITCH
+-- line 58 "sql.rl" -- end of line directive
+       table_name,columns = token,{};       -- ACTION
+        elseif _tempval  == 6 then --4 FROM_STATE_ACTION_SWITCH
+-- line 59 "sql.rl" -- end of line directive
+       h.create(table_name, columns);       -- ACTION
+        elseif _tempval  == 7 then --4 FROM_STATE_ACTION_SWITCH
+-- line 65 "sql.rl" -- end of line directive
+      
+			value_count = value_count + 1; value_list[value_count] = token:gsub("\\.", _sql_unescapes);
+		      -- ACTION
+        elseif _tempval  == 8 then --4 FROM_STATE_ACTION_SWITCH
+-- line 68 "sql.rl" -- end of line directive
+       value_count = value_count + 1; value_list[value_count] = tonumber(token);       -- ACTION
+        elseif _tempval  == 9 then --4 FROM_STATE_ACTION_SWITCH
+-- line 69 "sql.rl" -- end of line directive
+       value_count = value_count + 1;       -- ACTION
+        elseif _tempval  == 10 then --4 FROM_STATE_ACTION_SWITCH
+-- line 71 "sql.rl" -- end of line directive
+       value_list,value_count = {},0;       -- ACTION
+        elseif _tempval  == 11 then --4 FROM_STATE_ACTION_SWITCH
+-- line 71 "sql.rl" -- end of line directive
+       table.insert(value_lists, value_list);       -- ACTION
+        elseif _tempval  == 12 then --4 FROM_STATE_ACTION_SWITCH
+-- line 74 "sql.rl" -- end of line directive
+       table_name,value_lists = token,{};       -- ACTION
+        elseif _tempval  == 13 then --4 FROM_STATE_ACTION_SWITCH
+-- line 75 "sql.rl" -- end of line directive
+       h.insert(table_name, value_lists);       -- ACTION
+        end
+-- line 355 "sql.lua" -- end of line directive
+    -- end action switch
+      end -- while _nacts
+    end
+
+    if _trigger_goto then _continue = true; break; end
+    end -- endif 
+
+    if _goto_level <= _again then
+      if cs == 0 then
+        _goto_level = _out;
+        _continue = true; break;
+      end
+      p = p + 1;
+      if p ~= pe then
+        _goto_level = _resume;
+        _continue = true; break;
+      end
+    end -- _goto_level <= _again
+
+    if _goto_level <= _test_eof then
+    end -- _goto_level <= _test_eof
+
+    if _goto_level <= _out then break; end
+  _continue = true;
+  until true;
+  if not _continue then break; end
+  end -- endif _goto_level <= out
+
+  -- end of execute block
+
+
+	if cs < parse_sql_first_final then
+		print("parse_sql: there was an error, line "..pos_line.." column "..pos_char);
+	else
+		print("Success. EOF at line "..pos_line.." column "..pos_char)
+	end
+end
+
+end
+
+-- import modules
+package.path = [[C:\Documents and Settings\Waqas\Desktop\mercurial\prosody-hg\?.lua;]]..package.path;
+
+-- ugly workaround for getting datamanager to work outside of prosody :(
+prosody = { };
+prosody.platform = "unknown";
+if os.getenv("WINDIR") then
+	prosody.platform = "windows";
+elseif package.config:sub(1,1) == "/" then
+	prosody.platform = "_posix";
+end
+package.loaded["util.logger"] = {init = function() return function() end; end}
+
+local dm = require "util.datamanager";
+dm.set_data_path("data");
+
+local datetime = require "util.datetime";
+
+local lxp = require "lxp";
+local st = require "util.stanza";
+
+local parse_xml = (function()
+	local ns_prefixes = {
+		["http://www.w3.org/XML/1998/namespace"] = "xml";
+	};
+	local ns_separator = "\1";
+	local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
+	return function(xml)
+		local handler = {};
+		local stanza = st.stanza("root");
+		function handler:StartElement(tagname, attr)
+			local curr_ns,name = tagname:match(ns_pattern);
+			if name == "" then
+				curr_ns, name = "", curr_ns;
+			end
+			if curr_ns ~= "" then
+				attr.xmlns = curr_ns;
+			end
+			for i=1,#attr do
+				local k = attr[i];
+				attr[i] = nil;
+				local ns, nm = k:match(ns_pattern);
+				if nm ~= "" then
+					ns = ns_prefixes[ns]; 
+					if ns then 
+						attr[ns..":"..nm] = attr[k];
+						attr[k] = nil;
+					end
+				end
+			end
+			stanza:tag(name, attr);
+		end
+		function handler:CharacterData(data)
+			stanza:text(data);
+		end
+		function handler:EndElement(tagname)
+			stanza:up();
+		end
+		local parser = lxp.new(handler, "\1");
+		local ok, err, line, col = parser:parse(xml);
+		if ok then ok, err, line, col = parser:parse(); end
+		--parser:close();
+		if ok then
+			return stanza.tags[1];
+		else
+			return ok, err.." (line "..line..", col "..col..")";
+		end
+	end;
+end)();
+
+function store_password(username, host, password)
+	-- create or update account for username@host
+	local ret, err = dm.store(username, host, "accounts", {password = password});
+	print("["..(err or "success").."] stored account: "..username.."@"..host.." = "..password);
+end
+
+function store_vcard(username, host, stanza)
+	-- create or update vCard for username@host
+	local ret, err = dm.store(username, host, "vcard", st.preserialize(stanza));
+	print("["..(err or "success").."] stored vCard: "..username.."@"..host);
+end
+
+function store_roster(username, host, roster_items)
+	-- fetch current roster-table for username@host if he already has one
+	local roster = dm.load(username, host, "roster") or {};
+	-- merge imported roster-items with loaded roster
+	for item_tag in roster_items:childtags() do
+		-- jid for this roster-item
+		local item_jid = item_tag.attr.jid
+		-- validate item stanzas
+		if (item_tag.name == "item") and (item_jid ~= "") then
+			-- prepare roster item
+			-- TODO: is the subscription attribute optional?
+			local item = {subscription = item_tag.attr.subscription, groups = {}};
+			-- optional: give roster item a real name
+			if item_tag.attr.name then
+				item.name = item_tag.attr.name;
+			end
+			-- optional: iterate over group stanzas inside item stanza
+			for group_tag in item_tag:childtags() do
+				local group_name = group_tag:get_text();
+				if (group_tag.name == "group") and (group_name ~= "") then
+					item.groups[group_name] = true;
+				else
+					print("[error] invalid group stanza: "..group_tag:pretty_print());
+				end
+			end
+			-- store item in roster
+			roster[item_jid] = item;
+			print("[success] roster entry: " ..username.."@"..host.." - "..item_jid);
+		else
+			print("[error] invalid roster stanza: " ..item_tag:pretty_print());
+		end
+
+	end
+	-- store merged roster-table
+	local ret, err = dm.store(username, host, "roster", roster);
+	print("["..(err or "success").."] stored roster: " ..username.."@"..host);
+end
+
+function store_subscription_request(username, host, presence_stanza)
+	local from_bare = presence_stanza.attr.from;
+
+	-- fetch current roster-table for username@host if he already has one
+	local roster = dm.load(username, host, "roster") or {};
+
+	local item = roster[from_bare];
+	if item and (item.subscription == "from" or item.subscription == "both") then
+		return; -- already subscribed, do nothing
+	end
+
+	-- add to table of pending subscriptions
+	if not roster.pending then roster.pending = {}; end
+	roster.pending[from_bare] = true;
+
+	-- store updated roster-table
+	local ret, err = dm.store(username, host, "roster", roster);
+	print("["..(err or "success").."] stored subscription request: " ..username.."@"..host.." - "..from_bare);
+end
+
+local os_date = os.date;
+local os_time = os.time;
+local os_difftime = os.difftime;
+function datetime_parse(s)
+	if s then
+		local year, month, day, hour, min, sec, tzd;
+		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+%-]?.*)$");
+		if year then
+			local time_offset = os_difftime(os_time(os_date("*t")), os_time(os_date("!*t"))); -- to deal with local timezone
+			local tzd_offset = 0;
+			if tzd ~= "" and tzd ~= "Z" then
+				local sign, h, m = tzd:match("([+%-])(%d%d):?(%d*)");
+				if not sign then return; end
+				if #m ~= 2 then m = "0"; end
+				h, m = tonumber(h), tonumber(m);
+				tzd_offset = h * 60 * 60 + m * 60;
+				if sign == "-" then tzd_offset = -tzd_offset; end
+			end
+			sec = (sec + time_offset) - tzd_offset;
+			return os_time({year=year, month=month, day=day, hour=hour, min=min, sec=sec, isdst=false});
+		end
+	end
+end
+
+function store_offline_messages(username, host, stanza)
+	-- TODO: maybe use list_load(), append and list_store() instead
+	--       of constantly reopening the file with list_append()?
+	--for ch in offline_messages:childtags() do
+		--print("message :"..ch:pretty_print());
+		stanza.attr.node = nil;
+
+		local stamp = stanza:get_child("x", "jabber:x:delay");
+		if not stamp or not stamp.attr.stamp then print(2) return; end
+
+		for i=1,#stanza do if stanza[i] == stamp then table.remove(stanza, i); break; end end
+		for i=1,#stanza.tags do if stanza.tags[i] == stamp then table.remove(stanza.tags, i); break; end end
+
+		local parsed_stamp = datetime_parse(stamp.attr.stamp);
+		if not parsed_stamp then print(1, stamp.attr.stamp) return; end
+
+		stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(parsed_stamp), datetime.legacy(parsed_stamp);
+		local ret, err = dm.list_append(username, host, "offline", st.preserialize(stanza));
+		print("["..(err or "success").."] stored offline message: " ..username.."@"..host.." - "..stanza.attr.from);
+	--end
+end
+
+-- load data
+local arg = ...;
+local help = "/? -? ? /h -h /help -help --help";
+if not arg or help:find(arg, 1, true) then
+	print([[XEP-227 importer for Prosody
+
+  Usage: jabberd14sql2prosody.lua filename.sql
+]]);
+	os.exit(1);
+end
+local f = io.open(arg);
+local s = f:read("*a");
+f:close();
+
+local table_count = 0;
+local insert_count = 0;
+local row_count = 0;
+-- parse
+parse_sql(s, {
+	create = function(table_name, columns)
+		--[[print(table_name);]]
+		table_count = table_count + 1;
+	end;
+	insert = function(table_name, value_lists)
+		--[[print(table_name, #value_lists);]]
+		insert_count = insert_count + 1;
+		row_count = row_count + #value_lists;
+
+		for _,value_list in ipairs(value_lists) do
+			if table_name == "users" then
+				local user, realm, password = unpack(value_list);
+				store_password(user, realm, password);
+			elseif table_name == "roster" then
+				local user, realm, xml = unpack(value_list);
+				local stanza,err = parse_xml(xml);
+				if stanza then
+					store_roster(user, realm, stanza);
+				else
+					print("[error] roster: XML parsing failed for "..user.."@"..realm..": "..err);
+				end
+			elseif table_name == "vcard" then
+				local user, realm, name, email, nickname, birthday, photo, xml = unpack(value_list);
+				if xml then
+					local stanza,err = parse_xml(xml);
+					if stanza then
+						store_vcard(user, realm, stanza);
+					else
+						print("[error] vcard: XML parsing failed for "..user.."@"..realm..": "..err);
+					end
+				else
+					--print("[warn] vcard: NULL vCard for "..user.."@"..realm..": "..err);
+				end
+			elseif table_name == "storedsubscriptionrequests" then
+				local user, realm, fromjid, xml = unpack(value_list);
+				local stanza,err = parse_xml(xml);
+				if stanza then
+					store_subscription_request(user, realm, stanza);
+				else
+					print("[error] storedsubscriptionrequests: XML parsing failed for "..user.."@"..realm..": "..err);
+				end
+			elseif table_name == "messages" then
+				--local user, realm, node, correspondent, type, storetime, delivertime, subject, body, xml = unpack(value_list);
+				local user, realm, type, xml = value_list[1], value_list[2], value_list[5], value_list[10];
+				if type == "offline" and xml ~= "" then
+					local stanza,err = parse_xml(xml);
+					if stanza then
+						store_offline_messages(user, realm, stanza);
+					else
+						print("[error] offline messages: XML parsing failed for "..user.."@"..realm..": "..err);
+						print(unpack(value_list));
+					end
+				end
+			end
+		end
+	end;
+});
+
+print("table_count", table_count);
+print("insert_count", insert_count);
+print("row_count", row_count);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/openfire2prosody.lua	Wed Sep 12 22:03:57 2012 +0500
@@ -0,0 +1,153 @@
+#!/usr/bin/env lua
+-- Prosody IM
+-- Copyright (C) 2008-2009 Waqas Hussain
+-- 
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+package.path = package.path..";../?.lua";
+package.cpath = package.cpath..";../?.so"; -- needed for util.pposix used in datamanager
+
+-- ugly workaround for getting datamanager to work outside of prosody :(
+prosody = { };
+prosody.platform = "unknown";
+if os.getenv("WINDIR") then
+	prosody.platform = "windows";
+elseif package.config:sub(1,1) == "/" then
+	prosody.platform = "posix";
+end
+
+local lxp = require "lxp";
+local st = require "util.stanza";
+
+local parse_xml = (function()
+	local ns_prefixes = {
+		["http://www.w3.org/XML/1998/namespace"] = "xml";
+	};
+	local ns_separator = "\1";
+	local ns_pattern = "^([^"..ns_separator.."]*)"..ns_separator.."?(.*)$";
+	return function(xml)
+		local handler = {};
+		local stanza = st.stanza("root");
+		function handler:StartElement(tagname, attr)
+			local curr_ns,name = tagname:match(ns_pattern);
+			if name == "" then
+				curr_ns, name = "", curr_ns;
+			end
+			if curr_ns ~= "" then
+				attr.xmlns = curr_ns;
+			end
+			for i=1,#attr do
+				local k = attr[i];
+				attr[i] = nil;
+				local ns, nm = k:match(ns_pattern);
+				if nm ~= "" then
+					ns = ns_prefixes[ns]; 
+					if ns then 
+						attr[ns..":"..nm] = attr[k];
+						attr[k] = nil;
+					end
+				end
+			end
+			stanza:tag(name, attr);
+		end
+		function handler:CharacterData(data)
+			stanza:text(data);
+		end
+		function handler:EndElement(tagname)
+			stanza:up();
+		end
+		local parser = lxp.new(handler, "\1");
+		local ok, err, line, col = parser:parse(xml);
+		if ok then ok, err, line, col = parser:parse(); end
+		--parser:close();
+		if ok then
+			return stanza.tags[1];
+		else
+			return ok, err.." (line "..line..", col "..col..")";
+		end
+	end;
+end)();
+
+-----------------------------------------------------------------------
+
+package.loaded["util.logger"] = {init = function() return function() end; end}
+local dm = require "util.datamanager"
+dm.set_data_path("data");
+
+local arg = ...;
+local help = "/? -? ? /h -h /help -help --help";
+if not arg or help:find(arg, 1, true) then
+	print([[Openfire importer for Prosody
+
+  Usage: openfire2prosody.lua filename.xml hostname
+
+]]);
+	os.exit(1);
+end
+
+local host = select(2, ...) or "localhost";
+
+local file = assert(io.open(arg));
+local data = assert(file:read("*a"));
+file:close();
+
+local xml = assert(parse_xml(data));
+
+assert(xml.name == "Openfire", "The input file is not an Openfire XML export");
+
+local substatus_mapping = { ["0"] = "none", ["1"] = "to", ["2"] = "from", ["3"] = "both" };
+
+for _,tag in ipairs(xml.tags) do
+	if tag.name == "User" then
+		local username, password, roster;
+
+		for _,tag in ipairs(tag.tags) do
+			if tag.name == "Username" then
+				username = tag:get_text();
+			elseif tag.name == "Password" then
+				password = tag:get_text();
+			elseif tag.name == "Roster" then
+				roster = {};
+				local pending = {};
+				for _,tag in ipairs(tag.tags) do
+					if tag.name == "Item" then
+						local jid = assert(tag.attr.jid, "Roster item has no JID");
+						if tag.attr.substatus ~= "-1" then
+							local item = {};
+							item.name = tag.attr.name;
+							item.subscription = assert(substatus_mapping[tag.attr.substatus], "invalid substatus");
+							item.ask = tag.attr.askstatus == "0" and "subscribe" or nil;
+
+							local groups = {};
+							for _,tag in ipairs(tag) do
+								if tag.name == "Group" then
+									groups[tag:get_text()] = true;
+								end
+							end
+							item.groups = groups;
+							roster[jid] = item;
+						end
+						if tag.attr.recvstatus == "1" then pending[jid] = true; end
+					end
+				end
+
+				if next(pending) then
+					roster[false] = { pending = pending };
+				end
+			end
+		end
+
+		assert(username and password, "No username or password");
+
+		local ret, err = dm.store(username, host, "accounts", {password = password});
+		print("["..(err or "success").."] stored account: "..username.."@"..host.." = "..password);
+
+		if roster then
+			local ret, err = dm.store(username, host, "roster", roster);
+			print("["..(err or "success").."] stored roster: "..username.."@"..host.." = "..password);
+		end
+	end
+end
+