-int sql_step_wrap(sqlite3_stmt *ssh, const char *ssh_string,
- const char *file, int line) {
+int sql_step_distinct(sqlite3_stmt *ssh, const char *ssh_string,
+ const char *file, int line,
+ int *cols, int ncols, int nkeycols) {
+ for (;;) {
+ if (!sql_step(ssh, ssh_string, file, line)) return 0;
+
+ int i;
+ for (i=0; i<ncols; i++) {
+ int v= sqlite3_column_int(ssh, i);
+ if (v == cols[i]) continue;
+
+ assert(i<nkeycols);
+ cols[i++]= v;
+ for ( ; i<ncols; i++)
+ cols[i]= sqlite3_column_int(ssh, i);
+ return 1;
+ }
+ }
+}
+
+int sql_step(sqlite3_stmt *ssh, const char *ssh_string,
+ const char *file, int line) {