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