+
+ int max_narches=
+ sql_single_int(" SELECT count(*) FROM (\n"
+ " SELECT DISTINCT archipelago\n"
+ " FROM islands\n"
+ " )");
+ MCALLOC(archnames, max_narches);
+ MCALLOC_INITEACH(islandid2arch, islandtablesz, *this=-1);
+
+ sqlite3_stmt *archs;
+ SQL_PREPARE(archs,
+ " SELECT islandid, archipelago\n"
+ " FROM islands\n"
+ " ORDER BY archipelago");
+ while (SQL_STEP(archs)) {
+ int isle= sqlite3_column_int(archs,0);
+ const char *archname= (const char*)sqlite3_column_text(archs,1);
+ int arch;
+ for (arch=0; arch<narches; arch++)
+ if (!strcmp(archnames[arch], archname)) goto found;
+ assert(narches < max_narches);
+ arch= narches++;
+ archnames[arch]= masprintf("%s",archname);
+ found:
+ islandid2arch[isle]= arch;
+ }
+ sqlite3_finalize(archs);
+
+ granusz_fin[0]= granusz_mid[0]= narches;
+ granusz_fin[1]= islandtablesz; granusz_mid[1]= narches;
+ granusz_fin[2]= granusz_mid[2]= islandtablesz;