#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "crsqlite.h"
int crsql_close(sqlite3 *db);
static void testRowidsForReads() {
printf("RowidForReads\n");
sqlite3 *db;
int rc;
rc = sqlite3_open(":memory:", &db);
rc = sqlite3_exec(db, "CREATE TABLE foo (a primary key, b);", 0, 0, 0);
rc += sqlite3_exec(db, "SELECT crsql_as_crr('foo');", 0, 0, 0);
assert(rc == SQLITE_OK);
sqlite3_exec(db, "INSERT INTO foo VALUES (1,2);", 0, 0, 0);
sqlite3_exec(db, "INSERT INTO foo VALUES (2,3);", 0, 0, 0);
char *zSql = "SELECT _rowid_ FROM crsql_changes";
sqlite3_stmt *pStmt;
rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
assert(rc == SQLITE_OK);
assert(sqlite3_step(pStmt) == SQLITE_ROW);
assert(sqlite3_column_int64(pStmt, 0) == 1);
assert(sqlite3_step(pStmt) == SQLITE_ROW);
assert(sqlite3_column_int64(pStmt, 0) == 2);
sqlite3_finalize(pStmt);
rc = sqlite3_exec(db, "CREATE TABLE bar (a primary key, b)", 0, 0, 0);
rc += sqlite3_exec(db, "SELECT crsql_as_crr('bar');", 0, 0, 0);
rc += sqlite3_exec(db, "INSERT INTO bar VALUES (1,2);", 0, 0, 0);
rc += sqlite3_exec(db, "INSERT INTO bar VALUES (2,3);", 0, 0, 0);
rc += sqlite3_exec(db, "CREATE TABLE baz (a primary key, b)", 0, 0, 0);
rc += sqlite3_exec(db, "SELECT crsql_as_crr('baz');", 0, 0, 0);
rc += sqlite3_exec(db, "INSERT INTO baz VALUES (1,2);", 0, 0, 0);
rc += sqlite3_exec(db, "INSERT INTO baz VALUES (2,3);", 0, 0, 0);
assert(rc == SQLITE_OK);
sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 1);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 2);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 1 * ROWID_SLAB_SIZE + 1);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 1 * ROWID_SLAB_SIZE + 2);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 2 * ROWID_SLAB_SIZE + 1);
sqlite3_step(pStmt);
assert(sqlite3_column_int64(pStmt, 0) == 2 * ROWID_SLAB_SIZE + 2);
sqlite3_finalize(pStmt);
crsql_close(db);
printf("\t\e[0;32mSuccess\e[0m\n");
}
void crsqlChangesVtabRowidTestSuite() {
printf("\e[47m\e[1;30mSuite: crsql_changesVtabRowid\e[0m\n");
testRowidsForReads();
}