// todo: hotwire programs only once !636 !sf !L !cast !class _javax 19 !JavaTok main { static new Map tables; static new Map tableFields; static long totalRows; static Object in; static Class x1000656; static Object releaseNote = new Object() { public void finalize() { System.err.println("Note: MySQL dump importer released."); }}; psvm { if (in == null) in = loadSnippet("#3000013"); // mysql dump // load subprograms x1000656 = hotwire("#1000656"); L creates = find_create_statements((S) in); print(creates.size() + " creates"); for (S create : creates) { String tableName = get_table_name_from_create_statement(create); String[] names = find_field_names(create).split(", "); tableFields.put(tableName, Arrays.asList(names)); } L inserts = find_insert_statements((S) in); print(inserts.size() + " inserts"); for (S insert : inserts) { String table = get_table_name_from_insert_statement(insert); print("Getting values"); List data = parse_mysql_values(insert); print("Got values (" + data.size() + " rows)"); addData(table, data); totalRows += data.size(); } print("Tables: " + structure(tables.keySet())); print("Fields: " + structure(tableFields)); print("Total rows imported: " + totalRows); } static S get_table_name_from_create_statement(S create) { print(create); // Java code taken from ? O in = javaTok(create); in = ((List) in).get(7); return (S) in; } static S get_table_name_from_insert_statement(S insert) { // Java code taken from #1000665 O in = javaTok(insert); in = ((List) in).get(7); return (S) in; } static S find_field_names(String create) { return (S) process("#1000648", create); } static L find_create_statements(String mysqlDump) { //return (L) process("#1000642", mysqlDump, "markedStrings"); return find_statements(mysqlDump, "create"); } static L find_insert_statements(String mysqlDump) { //return (L) process("#1000650", mysqlDump, "markedStrings"); return find_statements(mysqlDump, "insert"); } static L find_statements(String mysqlDump, String cmd) { new L l; L tok = mysqlTok(mysqlDump); int c = 0; for (int i = 1; i < tok.size(); i += 2) { S t = tok.get(i); if (t.equalsIgnoreCase(cmd)) { print("create at " + i); c = i; } if (t.equals(";")) { //print("; at " + i); if (c != 0) { l.add(JavaTok.join(tok.subList(c, i+1))); c = 0; } } } return l; } static L parse_mysql_values(S insert) { // It prints all the data if we don't silence it... return (L) processSilent(x1000656, insert); } static void addData(S table, List data) { List t = tables.get(table); if (t == null) tables.put(table, t = new List); t.addAll(data); } }