Very Popular
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899#include <stdio.h>#include <stdlib.h>#include <sqlite3.h>
#define TRUE 1#define FALSE 0
#define TEST_DB_FILE "2GB_test.db"
#define SQL_CREATE_TBL "CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)"#define SQL_INSERT_VAL "INSERT INTO test (value) VALUES (?)"
#define VAL_LEN 65536#define VAL_NUM 45000
void rand_str(char *dest, size_t length) { char charset[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; while (length --> 0) { size_t index = (double) rand() / RAND_MAX * (sizeof charset - 1); *dest++ = charset[index]; } *dest = '\0';}
int execute_query(sqlite3* db, char* query) { sqlite3_stmt* stmt_create; if (sqlite3_prepare_v2(db, query, -1, &stmt_create, NULL) != SQLITE_OK) { printf("Failed to prepare query statement: %s\n", sqlite3_errmsg(db)); return FALSE; } if (sqlite3_step(stmt_create) != SQLITE_DONE) { printf("Failed to run query statement: %s\n", sqlite3_errmsg(db)); return FALSE; } sqlite3_finalize(stmt_create); return TRUE;}
int main(int argc, char* argv[]) { sqlite3* db; if (sqlite3_open(TEST_DB_FILE, &db) != SQLITE_OK) { printf("Failed to open database: %s\n", sqlite3_errmsg(db)); return 1; } // create database table sqlite3_stmt* stmt_create; if (sqlite3_prepare_v2(db, SQL_CREATE_TBL, -1, &stmt_create, NULL) != SQLITE_OK) { printf("Failed to prepare create table statement: %s\n", sqlite3_errmsg(db)); return 1; } if (sqlite3_step(stmt_create) != SQLITE_DONE) { printf("Failed to run create table statement: %s\n", sqlite3_errmsg(db)); return 1; } sqlite3_finalize(stmt_create); // insert values to reach 2GB sqlite3_stmt* stmt_insert; if (sqlite3_prepare_v2(db, SQL_INSERT_VAL, -1, &stmt_insert, NULL) != SQLITE_OK) { printf("Failed to prepare insert table statement: %s\n", sqlite3_errmsg(db)); return 1; } // begin transaction if (!execute_query(db, "begin")) { return 1; } char* buffer = malloc(VAL_LEN + 1); for (int64_t i = 0; i < VAL_NUM; i++) { rand_str(buffer, VAL_LEN); if (sqlite3_bind_text(stmt_insert, 1, buffer, VAL_LEN, NULL) != SQLITE_OK) { printf("Failed to bind value `%s`: %s\n", buffer, sqlite3_errmsg(db)); return 1; } if (sqlite3_step(stmt_insert) != SQLITE_DONE) { printf("Failed to run insert statement: %s\n", sqlite3_errmsg(db)); return 1; } if (sqlite3_reset(stmt_insert) != SQLITE_OK) { printf("Failed to reset statement: %s\n", sqlite3_errmsg(db)); return 1; } } // end transaction if (!execute_query(db, "commit")) { return 1; } sqlite3_finalize(stmt_insert); sqlite3_close(db); printf("Database created successfully.\n"); return 0;}