Skip to content

Instantly share code, notes, and snippets.

@Pavan-Nambi
Created April 30, 2026 17:39
Show Gist options
  • Select an option

  • Save Pavan-Nambi/e2db9f211d5607876d1caa2c4071ead1 to your computer and use it in GitHub Desktop.

Select an option

Save Pavan-Nambi/e2db9f211d5607876d1caa2c4071ead1 to your computer and use it in GitHub Desktop.
test2.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"
static int exec_sql(sqlite3 *db, const char *sql){
char *err = 0;
int rc = sqlite3_exec(db, sql, 0, 0, &err);
if(rc != SQLITE_OK){
fprintf(stderr, "exec failed rc=%d err=%s\n", rc, err ? err : "(null)");
sqlite3_free(err);
}
return rc;
}
static const char *rc_name(int rc){
switch(rc){
case SQLITE_OK: return "SQLITE_OK";
case SQLITE_BUSY: return "SQLITE_BUSY";
case SQLITE_CORRUPT: return "SQLITE_CORRUPT";
default: return "OTHER";
}
}
int main(void){
sqlite3 *src = 0, *dst = 0;
sqlite3_backup *bk = 0;
sqlite3_int64 sz = 0;
unsigned char *img = 0, *cpy = 0;
int rc;
if(sqlite3_open(":memory:", &src) != SQLITE_OK) return 1;
if(sqlite3_open(":memory:", &dst) != SQLITE_OK) return 1;
rc = exec_sql(src,
"PRAGMA page_size=512; VACUUM;"
"CREATE TABLE x(v);"
"WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<5000)"
"INSERT INTO x SELECT printf('%08d%08d%08d',i,i,i) FROM c;");
if(rc != SQLITE_OK) return 1;
img = sqlite3_serialize(src, "main", &sz, 0);
if(!img || sz <= 0){
fprintf(stderr, "serialize failed\n");
return 1;
}
bk = sqlite3_backup_init(dst, "main", src, "main");
if(!bk){
fprintf(stderr, "backup_init failed: %s\n", sqlite3_errmsg(dst));
return 1;
}
rc = sqlite3_backup_step(bk, 1);
printf("backup_step rc=%d\n", rc);
cpy = (unsigned char*)sqlite3_malloc64((sqlite3_uint64)sz);
if(!cpy) return 1;
memcpy(cpy, img, (size_t)sz);
rc = sqlite3_deserialize(dst, "main", cpy, sz, sz, SQLITE_DESERIALIZE_FREEONCLOSE);
printf("deserialize rc=%d (%s)\n", rc, rc_name(rc));
printf("errcode=%d ex=%d msg=%s\n",
sqlite3_errcode(dst), sqlite3_extended_errcode(dst), sqlite3_errmsg(dst));
sqlite3_backup_finish(bk);
sqlite3_free(img);
sqlite3_close(dst);
sqlite3_close(src);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment