1*6d81180bSLoGin // This is a test program for sqlite3.
2*6d81180bSLoGin // We take it from rcore-os/arceos, thanks to @rcore-os community.
3*6d81180bSLoGin #include <sqlite3.h>
4*6d81180bSLoGin #include <stddef.h>
5*6d81180bSLoGin #include <stdio.h>
6*6d81180bSLoGin #include <string.h>
7*6d81180bSLoGin
callback(void * NotUsed,int argc,char ** argv,char ** azColName)8*6d81180bSLoGin int callback(void *NotUsed, int argc, char **argv, char **azColName)
9*6d81180bSLoGin {
10*6d81180bSLoGin NotUsed = NULL;
11*6d81180bSLoGin
12*6d81180bSLoGin for (int i = 0; i < argc; ++i) {
13*6d81180bSLoGin printf("%s = %s\n", azColName[i], (argv[i] ? argv[i] : "NULL"));
14*6d81180bSLoGin }
15*6d81180bSLoGin
16*6d81180bSLoGin printf("\n");
17*6d81180bSLoGin
18*6d81180bSLoGin return 0;
19*6d81180bSLoGin }
20*6d81180bSLoGin
exec(sqlite3 * db,char * sql)21*6d81180bSLoGin void exec(sqlite3 *db, char *sql)
22*6d81180bSLoGin {
23*6d81180bSLoGin printf("sqlite exec:\n %s\n", sql);
24*6d81180bSLoGin char *errmsg = NULL;
25*6d81180bSLoGin int rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
26*6d81180bSLoGin if (rc != SQLITE_OK) {
27*6d81180bSLoGin printf("sqlite exec error: %s\n", errmsg);
28*6d81180bSLoGin }
29*6d81180bSLoGin }
30*6d81180bSLoGin
query(sqlite3 * db,char * sql)31*6d81180bSLoGin void query(sqlite3 *db, char *sql)
32*6d81180bSLoGin {
33*6d81180bSLoGin printf("sqlite query:\n %s\n", sql);
34*6d81180bSLoGin char *errmsg = NULL;
35*6d81180bSLoGin int rc = sqlite3_exec(db, sql, callback, NULL, &errmsg);
36*6d81180bSLoGin
37*6d81180bSLoGin if (rc != SQLITE_OK) {
38*6d81180bSLoGin printf("%s\n", errmsg);
39*6d81180bSLoGin }
40*6d81180bSLoGin }
41*6d81180bSLoGin
query_test(sqlite3 * db,const char * args)42*6d81180bSLoGin void query_test(sqlite3 *db, const char *args)
43*6d81180bSLoGin {
44*6d81180bSLoGin puts("======== init user table ========");
45*6d81180bSLoGin exec(db, "create table user("
46*6d81180bSLoGin "id INTEGER PRIMARY KEY AUTOINCREMENT,"
47*6d81180bSLoGin "username TEXT,"
48*6d81180bSLoGin "password TEXT"
49*6d81180bSLoGin ")");
50*6d81180bSLoGin
51*6d81180bSLoGin puts("======== insert user 1, 2, 3 into user table ========");
52*6d81180bSLoGin
53*6d81180bSLoGin char cmd[256] = {0};
54*6d81180bSLoGin sprintf(cmd,
55*6d81180bSLoGin "insert into user (username, password) VALUES ('%s_1', 'password1'), ('%s_2', "
56*6d81180bSLoGin "'password2'), ('%s_3', 'password3')",
57*6d81180bSLoGin args, args, args);
58*6d81180bSLoGin exec(db, cmd);
59*6d81180bSLoGin
60*6d81180bSLoGin puts("======== select all ========");
61*6d81180bSLoGin query(db, "select * from user");
62*6d81180bSLoGin
63*6d81180bSLoGin puts("======== select id = 2 ========");
64*6d81180bSLoGin query(db, "select * from user where id = 2");
65*6d81180bSLoGin }
66*6d81180bSLoGin
memory()67*6d81180bSLoGin void memory()
68*6d81180bSLoGin {
69*6d81180bSLoGin sqlite3 *db;
70*6d81180bSLoGin printf("sqlite open memory\n");
71*6d81180bSLoGin int ret = sqlite3_open(":memory:", &db);
72*6d81180bSLoGin printf("sqlite open memory status %d \n", ret);
73*6d81180bSLoGin
74*6d81180bSLoGin query_test(db, "memory");
75*6d81180bSLoGin }
76*6d81180bSLoGin
file()77*6d81180bSLoGin void file()
78*6d81180bSLoGin {
79*6d81180bSLoGin sqlite3 *db;
80*6d81180bSLoGin int ret = sqlite3_open("file.sqlite", &db);
81*6d81180bSLoGin printf("sqlite open /file.sqlite status %d \n", ret);
82*6d81180bSLoGin
83*6d81180bSLoGin if (ret != 0) {
84*6d81180bSLoGin printf("sqlite open error");
85*6d81180bSLoGin return;
86*6d81180bSLoGin }
87*6d81180bSLoGin
88*6d81180bSLoGin query_test(db, "file");
89*6d81180bSLoGin sqlite3_close(db);
90*6d81180bSLoGin }
91*6d81180bSLoGin
main()92*6d81180bSLoGin int main()
93*6d81180bSLoGin {
94*6d81180bSLoGin printf("sqlite version: %s\n", sqlite3_libversion());
95*6d81180bSLoGin
96*6d81180bSLoGin memory();
97*6d81180bSLoGin file();
98*6d81180bSLoGin return 0;
99*6d81180bSLoGin }
100