#ifndef CRSQLITE_EXTDATA_H
#define CRSQLITE_EXTDATA_H
#include "sqlite3ext.h"
SQLITE_EXTENSION_INIT3
#include "tableinfo.h"
typedef struct crsql_ExtData crsql_ExtData;
struct crsql_ExtData {
sqlite3_stmt *pPragmaSchemaVersionStmt;
sqlite3_stmt *pPragmaDataVersionStmt;
int pragmaDataVersion;
sqlite3_int64 dbVersion;
sqlite3_int64 pendingDbVersion;
int pragmaSchemaVersion;
int pragmaSchemaVersionForTableInfos;
unsigned char *siteId;
sqlite3_stmt *pDbVersionStmt;
crsql_TableInfo **zpTableInfos;
int tableInfosLen;
int rowsImpacted;
int seq;
sqlite3_stmt *pSetSyncBitStmt;
sqlite3_stmt *pClearSyncBitStmt;
sqlite3_stmt *pSetSiteIdOrdinalStmt;
sqlite3_stmt *pSelectSiteIdOrdinalStmt;
void *pStmtCache;
};
crsql_ExtData *crsql_newExtData(sqlite3 *db, unsigned char *siteIdBuffer);
void crsql_freeExtData(crsql_ExtData *pExtData);
int crsql_fetchPragmaSchemaVersion(sqlite3 *db, crsql_ExtData *pExtData,
int which);
int crsql_fetchPragmaDataVersion(sqlite3 *db, crsql_ExtData *pExtData);
int crsql_recreateDbVersionStmt(sqlite3 *db, crsql_ExtData *pExtData);
int crsql_fetchDbVersionFromStorage(sqlite3 *db, crsql_ExtData *pExtData,
char **errmsg);
int crsql_getDbVersion(sqlite3 *db, crsql_ExtData *pExtData, char **errmsg);
void crsql_finalize(crsql_ExtData *pExtData);
int crsql_ensureTableInfosAreUpToDate(sqlite3 *db, crsql_ExtData *pExtData,
char **errmsg);
#endif