Skip to content

Commit 6b7f8a7

Browse files
committed
new file: d1_mini_msd_shield.png
new file: d1_mini_msd_shield_strip.png new file: examples/sqlite3_sdfat/data/babynames-gendered-2015.db new file: examples/sqlite3_sdfat/data/census2000names.db new file: examples/sqlite3_sdfat/data/mdr512.db new file: examples/sqlite3_sdfat/sqlite3_sdfat.ino new file: examples/sqlite3_spiffs/sqlite3_spiffs.ino deleted: examples/sqlite3_select/sqlite3_select.ino deleted: examples/sqlite3_select_spiffs/data/mdr512.db deleted: examples/sqlite3_select_spiffs/sqlite3_select_spiffs.ino modified: library.properties modified: src/config_ext.h modified: src/esp8266.cpp modified: src/spiffs_fns.cpp modified: src/spiffs_fns.h modified: src/sqlite3.c modified: src/sqlite3.h modified: src/sqlite3ext.h modified: src/vfs.cpp modified: src/vfs.h Prepare first release
1 parent 2ab2778 commit 6b7f8a7

File tree

7 files changed

+265
-0
lines changed

7 files changed

+265
-0
lines changed

d1_mini_msd_shield.png

1.77 MB
Loading

d1_mini_msd_shield_strip.png

820 KB
Loading
7.71 MB
Binary file not shown.
21.1 MB
Binary file not shown.
46.8 MB
Binary file not shown.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/*
2+
This example opens Sqlite3 databases from SD Card and
3+
retrieves data from them.
4+
Before running please copy following files to SD Card:
5+
data/mdr512.db
6+
data/census2000names.db
7+
Also increase stack size in cores/esp8266/cont.h
8+
to atleast 6144 (from 4096)
9+
*/
10+
#include <stdio.h>
11+
#include <stdlib.h>
12+
#include <sqlite3.h>
13+
#include <vfs.h>
14+
#include <SPI.h>
15+
#include <FS.h>
16+
extern "C" {
17+
#include "user_interface.h"
18+
}
19+
#include <ESP8266WiFi.h>
20+
21+
void WiFiOff() {
22+
wifi_station_disconnect();
23+
wifi_set_opmode(NULL_MODE);
24+
wifi_set_sleep_type(MODEM_SLEEP_T);
25+
wifi_fpm_open();
26+
wifi_fpm_do_sleep(0xFFFFFFF);
27+
}
28+
29+
const char* data = "Callback function called";
30+
static int callback(void *data, int argc, char **argv, char **azColName){
31+
int i;
32+
Serial.printf("%s: ", (const char*)data);
33+
for (i = 0; i<argc; i++){
34+
Serial.printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
35+
}
36+
Serial.printf("\n");
37+
return 0;
38+
}
39+
40+
int openDb(char *filename, sqlite3 **db) {
41+
int rc = sqlite3_open(filename, db);
42+
if (rc) {
43+
Serial.printf("Can't open database: %s\n", sqlite3_errmsg(*db));
44+
return rc;
45+
} else {
46+
Serial.printf("Opened database successfully\n");
47+
}
48+
return rc;
49+
}
50+
51+
char *zErrMsg = 0;
52+
int db_exec(sqlite3 *db, const char *sql) {
53+
long start = micros();
54+
int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
55+
if (rc != SQLITE_OK) {
56+
Serial.printf("SQL error: %s\n", zErrMsg);
57+
sqlite3_free(zErrMsg);
58+
} else {
59+
Serial.printf("Operation done successfully\n");
60+
}
61+
Serial.print(F("Time taken:"));
62+
Serial.println(micros()-start);
63+
return rc;
64+
}
65+
66+
void setup() {
67+
Serial.begin(74880);
68+
sqlite3 *db1;
69+
sqlite3 *db2;
70+
char *zErrMsg = 0;
71+
int rc;
72+
char *sql;
73+
74+
system_update_cpu_freq(SYS_CPU_160MHZ);
75+
WiFiOff();
76+
77+
SPI.begin();
78+
vfs_mount("/SD0", SS);
79+
80+
sqlite3_initialize();
81+
82+
// Open database 1
83+
if (openDb("/SD0/census2000names.db", &db1))
84+
return;
85+
if (openDb("/SD0/mdr512.db", &db2))
86+
return;
87+
88+
rc = db_exec(db1, "Select * from surnames where name = 'MICHELLE'");
89+
if (rc != SQLITE_OK) {
90+
sqlite3_close(db1);
91+
sqlite3_close(db2);
92+
return;
93+
}
94+
rc = db_exec(db2, "Select * from domain_rank where domain between 'google.com' and 'google.com.z'");
95+
if (rc != SQLITE_OK) {
96+
sqlite3_close(db1);
97+
sqlite3_close(db2);
98+
return;
99+
}
100+
rc = db_exec(db1, "Select * from surnames where name = 'SPRINGER'");
101+
if (rc != SQLITE_OK) {
102+
sqlite3_close(db1);
103+
sqlite3_close(db2);
104+
return;
105+
}
106+
rc = db_exec(db2, "Select * from domain_rank where domain = 'zoho.com'");
107+
if (rc != SQLITE_OK) {
108+
sqlite3_close(db1);
109+
sqlite3_close(db2);
110+
return;
111+
}
112+
113+
sqlite3_close(db1);
114+
sqlite3_close(db2);
115+
116+
}
117+
118+
void loop() {
119+
}
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/*
2+
This creates two empty databases, populates values, and retrieves them back
3+
from the SPIFFS file system.
4+
*/
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
#include <sqlite3.h>
8+
#include <vfs.h>
9+
#include <SPI.h>
10+
#include <FS.h>
11+
extern "C" {
12+
#include "user_interface.h"
13+
}
14+
#include <ESP8266WiFi.h>
15+
16+
void WiFiOff() {
17+
wifi_station_disconnect();
18+
wifi_set_opmode(NULL_MODE);
19+
wifi_set_sleep_type(MODEM_SLEEP_T);
20+
wifi_fpm_open();
21+
wifi_fpm_do_sleep(0xFFFFFFF);
22+
}
23+
24+
const char* data = "Callback function called";
25+
static int callback(void *data, int argc, char **argv, char **azColName) {
26+
int i;
27+
Serial.printf("%s: ", (const char*)data);
28+
for (i = 0; i<argc; i++){
29+
Serial.printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
30+
}
31+
Serial.printf("\n");
32+
return 0;
33+
}
34+
35+
int db_open(const char *filename, sqlite3 **db) {
36+
int rc = sqlite3_open(filename, db);
37+
if (rc) {
38+
Serial.printf("Can't open database: %s\n", sqlite3_errmsg(*db));
39+
return rc;
40+
} else {
41+
Serial.printf("Opened database successfully\n");
42+
}
43+
return rc;
44+
}
45+
46+
char *zErrMsg = 0;
47+
int db_exec(sqlite3 *db, const char *sql) {
48+
long start = micros();
49+
int rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
50+
if (rc != SQLITE_OK) {
51+
Serial.printf("SQL error: %s\n", zErrMsg);
52+
sqlite3_free(zErrMsg);
53+
} else {
54+
Serial.printf("Operation done successfully\n");
55+
}
56+
Serial.print(F("Time taken:"));
57+
Serial.println(micros()-start);
58+
return rc;
59+
}
60+
61+
void setup() {
62+
63+
Serial.begin(74880);
64+
sqlite3 *db1;
65+
sqlite3 *db2;
66+
int rc;
67+
68+
system_update_cpu_freq(SYS_CPU_160MHZ);
69+
WiFiOff();
70+
71+
if (!SPIFFS.begin()) {
72+
Serial.println("Failed to mount file system");
73+
return;
74+
}
75+
76+
// list SPIFFS contents
77+
Dir dir = SPIFFS.openDir("/");
78+
while (dir.next()) {
79+
String fileName = dir.fileName();
80+
size_t fileSize = dir.fileSize();
81+
Serial.printf("FS File: %s, size: %ld\n", fileName.c_str(), (long) fileSize);
82+
}
83+
Serial.printf("\n");
84+
85+
// remove existing file
86+
SPIFFS.remove("/test1.db");
87+
SPIFFS.remove("/test2.db");
88+
89+
sqlite3_initialize();
90+
91+
// Open databases
92+
File db_file_obj_1;
93+
vfs_set_spiffs_file_obj(&db_file_obj_1);
94+
if (db_open("/FLASH/test1.db", &db1))
95+
return;
96+
File db_file_obj_2;
97+
vfs_set_spiffs_file_obj(&db_file_obj_2);
98+
if (db_open("/FLASH/test2.db", &db2))
99+
return;
100+
101+
rc = db_exec(db1, "CREATE TABLE test1 (id INTEGER, content);");
102+
if (rc != SQLITE_OK) {
103+
sqlite3_close(db1);
104+
sqlite3_close(db2);
105+
return;
106+
}
107+
rc = db_exec(db2, "CREATE TABLE test2 (id INTEGER, content);");
108+
if (rc != SQLITE_OK) {
109+
sqlite3_close(db1);
110+
sqlite3_close(db2);
111+
return;
112+
}
113+
114+
rc = db_exec(db1, "INSERT INTO test1 VALUES (1, 'Hello, World from test1');");
115+
if (rc != SQLITE_OK) {
116+
sqlite3_close(db1);
117+
sqlite3_close(db2);
118+
return;
119+
}
120+
rc = db_exec(db2, "INSERT INTO test2 VALUES (1, 'Hello, World from test2');");
121+
if (rc != SQLITE_OK) {
122+
sqlite3_close(db1);
123+
sqlite3_close(db2);
124+
return;
125+
}
126+
127+
rc = db_exec(db1, "SELECT * FROM test1");
128+
if (rc != SQLITE_OK) {
129+
sqlite3_close(db1);
130+
sqlite3_close(db2);
131+
return;
132+
}
133+
rc = db_exec(db2, "SELECT * FROM test2");
134+
if (rc != SQLITE_OK) {
135+
sqlite3_close(db1);
136+
sqlite3_close(db2);
137+
return;
138+
}
139+
140+
sqlite3_close(db1);
141+
sqlite3_close(db2);
142+
143+
}
144+
145+
void loop() {
146+
}

0 commit comments

Comments
 (0)