xref: /DragonOS/user/apps/test_sqlite3/main.c (revision 6d81180b3b7328466b976b69c5f7782aa66d8a89)
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