-
-
Save Pavan-Nambi/e2db9f211d5607876d1caa2c4071ead1 to your computer and use it in GitHub Desktop.
test2.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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