container-superposition 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
# SQLite Overlay
|
|
2
|
+
|
|
3
|
+
SQLite embedded database with enhanced CLI tools and VS Code extensions for file-based database development.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **sqlite3 CLI** - Command-line interface for SQLite databases
|
|
8
|
+
- **litecli** - Modern CLI with syntax highlighting and autocompletion (requires Python)
|
|
9
|
+
- **File-based** - No server required, database stored in local files
|
|
10
|
+
- **VS Code Extensions:**
|
|
11
|
+
- SQLite Viewer (qwtel.sqlite-viewer) - View and edit SQLite databases
|
|
12
|
+
- SQLite (alexcvzz.vscode-sqlite) - Query and manage databases
|
|
13
|
+
- **Lightweight** - Minimal resource usage, instant startup
|
|
14
|
+
- **No service** - Works with both plain and compose templates
|
|
15
|
+
|
|
16
|
+
## How It Works
|
|
17
|
+
|
|
18
|
+
Unlike server-based databases, SQLite stores the entire database in a single file on disk. This overlay installs the SQLite CLI tools and VS Code extensions for working with SQLite databases.
|
|
19
|
+
|
|
20
|
+
**Architecture:**
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
graph LR
|
|
24
|
+
A[Development Container<br/>Your application code<br/>sqlite3 CLI<br/>litecli enhanced CLI<br/>SQLite databases .db<br/>No server needed]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**No Docker Compose service** - SQLite is embedded directly in your application and development environment.
|
|
28
|
+
|
|
29
|
+
## Configuration
|
|
30
|
+
|
|
31
|
+
No configuration needed! SQLite databases are just files on disk.
|
|
32
|
+
|
|
33
|
+
**Typical database locations:**
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# In project root
|
|
37
|
+
/workspace/database.db
|
|
38
|
+
|
|
39
|
+
# In data directory
|
|
40
|
+
/workspace/data/app.db
|
|
41
|
+
|
|
42
|
+
# In home directory
|
|
43
|
+
~/myapp.db
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Common Commands
|
|
47
|
+
|
|
48
|
+
### Using sqlite3 CLI
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Create/open database
|
|
52
|
+
sqlite3 myapp.db
|
|
53
|
+
|
|
54
|
+
# Create database and run commands
|
|
55
|
+
sqlite3 myapp.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT);"
|
|
56
|
+
|
|
57
|
+
# Run SQL file
|
|
58
|
+
sqlite3 myapp.db < schema.sql
|
|
59
|
+
|
|
60
|
+
# Dump database
|
|
61
|
+
sqlite3 myapp.db .dump > backup.sql
|
|
62
|
+
|
|
63
|
+
# Export to CSV
|
|
64
|
+
sqlite3 -header -csv myapp.db "SELECT * FROM users;" > users.csv
|
|
65
|
+
|
|
66
|
+
# Interactive mode
|
|
67
|
+
sqlite3 myapp.db
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### SQLite Interactive Commands
|
|
71
|
+
|
|
72
|
+
```sql
|
|
73
|
+
-- Inside sqlite3 interactive session
|
|
74
|
+
|
|
75
|
+
.help -- Show all commands
|
|
76
|
+
.tables -- List tables
|
|
77
|
+
.schema users -- Show table schema
|
|
78
|
+
.mode column -- Pretty-print results
|
|
79
|
+
.headers on -- Show column headers
|
|
80
|
+
.width 20 40 -- Set column widths
|
|
81
|
+
|
|
82
|
+
-- Query data
|
|
83
|
+
SELECT * FROM users;
|
|
84
|
+
|
|
85
|
+
-- Insert data
|
|
86
|
+
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
|
|
87
|
+
|
|
88
|
+
-- Exit
|
|
89
|
+
.quit
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Using litecli (Enhanced CLI)
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Create/open database (if Python overlay installed)
|
|
96
|
+
litecli myapp.db
|
|
97
|
+
|
|
98
|
+
# Features:
|
|
99
|
+
# - Syntax highlighting
|
|
100
|
+
# - Auto-completion (type table names, column names)
|
|
101
|
+
# - Query history (up/down arrows)
|
|
102
|
+
# - Multi-line editing
|
|
103
|
+
# - Better output formatting
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Database Operations
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Create table
|
|
110
|
+
sqlite3 myapp.db "
|
|
111
|
+
CREATE TABLE users (
|
|
112
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
113
|
+
name TEXT NOT NULL,
|
|
114
|
+
email TEXT UNIQUE,
|
|
115
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
116
|
+
);"
|
|
117
|
+
|
|
118
|
+
# Insert data
|
|
119
|
+
sqlite3 myapp.db "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');"
|
|
120
|
+
|
|
121
|
+
# Query data
|
|
122
|
+
sqlite3 myapp.db "SELECT * FROM users;"
|
|
123
|
+
|
|
124
|
+
# Update data
|
|
125
|
+
sqlite3 myapp.db "UPDATE users SET email = 'newemail@example.com' WHERE name = 'Alice';"
|
|
126
|
+
|
|
127
|
+
# Delete data
|
|
128
|
+
sqlite3 myapp.db "DELETE FROM users WHERE id = 1;"
|
|
129
|
+
|
|
130
|
+
# Vacuum (reclaim space)
|
|
131
|
+
sqlite3 myapp.db "VACUUM;"
|
|
132
|
+
|
|
133
|
+
# Backup database
|
|
134
|
+
sqlite3 myapp.db ".backup myapp_backup.db"
|
|
135
|
+
|
|
136
|
+
# Restore from backup
|
|
137
|
+
sqlite3 myapp.db ".restore myapp_backup.db"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Using VS Code Extensions
|
|
141
|
+
|
|
142
|
+
**SQLite Viewer Extension:**
|
|
143
|
+
|
|
144
|
+
1. Right-click on `.db` file in VS Code Explorer
|
|
145
|
+
2. Select "Open with SQLite Viewer"
|
|
146
|
+
3. Browse tables, view data, edit rows
|
|
147
|
+
|
|
148
|
+
**SQLite Extension:**
|
|
149
|
+
|
|
150
|
+
1. Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
|
|
151
|
+
2. Select "SQLite: Open Database"
|
|
152
|
+
3. Choose your `.db` file
|
|
153
|
+
4. Use "SQLite: New Query" to run SQL
|
|
154
|
+
|
|
155
|
+
## Application Integration
|
|
156
|
+
|
|
157
|
+
### Node.js
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# Install better-sqlite3 (synchronous, faster)
|
|
161
|
+
npm install better-sqlite3
|
|
162
|
+
|
|
163
|
+
# Or use sqlite3 (asynchronous)
|
|
164
|
+
npm install sqlite3
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```javascript
|
|
168
|
+
// Using better-sqlite3
|
|
169
|
+
const Database = require('better-sqlite3');
|
|
170
|
+
|
|
171
|
+
const db = new Database('myapp.db');
|
|
172
|
+
|
|
173
|
+
// Create table
|
|
174
|
+
db.exec(`
|
|
175
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
176
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
177
|
+
name TEXT,
|
|
178
|
+
email TEXT UNIQUE
|
|
179
|
+
)
|
|
180
|
+
`);
|
|
181
|
+
|
|
182
|
+
// Insert
|
|
183
|
+
const insert = db.prepare('INSERT INTO users (name, email) VALUES (?, ?)');
|
|
184
|
+
insert.run('Alice', 'alice@example.com');
|
|
185
|
+
|
|
186
|
+
// Query
|
|
187
|
+
const users = db.prepare('SELECT * FROM users').all();
|
|
188
|
+
console.log(users);
|
|
189
|
+
|
|
190
|
+
db.close();
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Python
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# sqlite3 module is built-in, no installation needed
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
import sqlite3
|
|
201
|
+
|
|
202
|
+
# Connect (creates file if doesn't exist)
|
|
203
|
+
conn = sqlite3.connect('myapp.db')
|
|
204
|
+
cursor = conn.cursor()
|
|
205
|
+
|
|
206
|
+
# Create table
|
|
207
|
+
cursor.execute('''
|
|
208
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
209
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
210
|
+
name TEXT,
|
|
211
|
+
email TEXT UNIQUE
|
|
212
|
+
)
|
|
213
|
+
''')
|
|
214
|
+
|
|
215
|
+
# Insert
|
|
216
|
+
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)',
|
|
217
|
+
('Alice', 'alice@example.com'))
|
|
218
|
+
conn.commit()
|
|
219
|
+
|
|
220
|
+
# Query
|
|
221
|
+
cursor.execute('SELECT * FROM users')
|
|
222
|
+
for row in cursor.fetchall():
|
|
223
|
+
print(row)
|
|
224
|
+
|
|
225
|
+
# Close
|
|
226
|
+
conn.close()
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### .NET
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Install SQLite package
|
|
233
|
+
dotnet add package Microsoft.Data.Sqlite
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
```csharp
|
|
237
|
+
using Microsoft.Data.Sqlite;
|
|
238
|
+
|
|
239
|
+
using var connection = new SqliteConnection("Data Source=myapp.db");
|
|
240
|
+
await connection.OpenAsync();
|
|
241
|
+
|
|
242
|
+
// Create table
|
|
243
|
+
var createCmd = connection.CreateCommand();
|
|
244
|
+
createCmd.CommandText = @"
|
|
245
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
246
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
247
|
+
name TEXT,
|
|
248
|
+
email TEXT UNIQUE
|
|
249
|
+
)
|
|
250
|
+
";
|
|
251
|
+
await createCmd.ExecuteNonQueryAsync();
|
|
252
|
+
|
|
253
|
+
// Insert
|
|
254
|
+
var insertCmd = connection.CreateCommand();
|
|
255
|
+
insertCmd.CommandText = "INSERT INTO users (name, email) VALUES ($name, $email)";
|
|
256
|
+
insertCmd.Parameters.AddWithValue("$name", "Alice");
|
|
257
|
+
insertCmd.Parameters.AddWithValue("$email", "alice@example.com");
|
|
258
|
+
await insertCmd.ExecuteNonQueryAsync();
|
|
259
|
+
|
|
260
|
+
// Query
|
|
261
|
+
var selectCmd = connection.CreateCommand();
|
|
262
|
+
selectCmd.CommandText = "SELECT * FROM users";
|
|
263
|
+
using var reader = await selectCmd.ExecuteReaderAsync();
|
|
264
|
+
while (await reader.ReadAsync())
|
|
265
|
+
{
|
|
266
|
+
Console.WriteLine($"{reader["name"]}: {reader["email"]}");
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Go
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Install SQLite driver
|
|
274
|
+
go get github.com/mattn/go-sqlite3
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
```go
|
|
278
|
+
package main
|
|
279
|
+
|
|
280
|
+
import (
|
|
281
|
+
"database/sql"
|
|
282
|
+
_ "github.com/mattn/go-sqlite3"
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
func main() {
|
|
286
|
+
db, _ := sql.Open("sqlite3", "myapp.db")
|
|
287
|
+
defer db.Close()
|
|
288
|
+
|
|
289
|
+
// Create table
|
|
290
|
+
db.Exec(`
|
|
291
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
292
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
293
|
+
name TEXT,
|
|
294
|
+
email TEXT UNIQUE
|
|
295
|
+
)
|
|
296
|
+
`)
|
|
297
|
+
|
|
298
|
+
// Insert
|
|
299
|
+
db.Exec("INSERT INTO users (name, email) VALUES (?, ?)",
|
|
300
|
+
"Alice", "alice@example.com")
|
|
301
|
+
|
|
302
|
+
// Query
|
|
303
|
+
rows, _ := db.Query("SELECT * FROM users")
|
|
304
|
+
defer rows.Close()
|
|
305
|
+
|
|
306
|
+
for rows.Next() {
|
|
307
|
+
var id int
|
|
308
|
+
var name, email string
|
|
309
|
+
rows.Scan(&id, &name, &email)
|
|
310
|
+
println(id, name, email)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Rust
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# Add to Cargo.toml
|
|
319
|
+
# rusqlite = "0.30"
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
```rust
|
|
323
|
+
use rusqlite::{Connection, Result};
|
|
324
|
+
|
|
325
|
+
fn main() -> Result<()> {
|
|
326
|
+
let conn = Connection::open("myapp.db")?;
|
|
327
|
+
|
|
328
|
+
// Create table
|
|
329
|
+
conn.execute(
|
|
330
|
+
"CREATE TABLE IF NOT EXISTS users (
|
|
331
|
+
id INTEGER PRIMARY KEY,
|
|
332
|
+
name TEXT,
|
|
333
|
+
email TEXT UNIQUE
|
|
334
|
+
)",
|
|
335
|
+
[],
|
|
336
|
+
)?;
|
|
337
|
+
|
|
338
|
+
// Insert
|
|
339
|
+
conn.execute(
|
|
340
|
+
"INSERT INTO users (name, email) VALUES (?1, ?2)",
|
|
341
|
+
&["Alice", "alice@example.com"],
|
|
342
|
+
)?;
|
|
343
|
+
|
|
344
|
+
// Query
|
|
345
|
+
let mut stmt = conn.prepare("SELECT * FROM users")?;
|
|
346
|
+
let users = stmt.query_map([], |row| {
|
|
347
|
+
Ok((
|
|
348
|
+
row.get::<_, i32>(0)?,
|
|
349
|
+
row.get::<_, String>(1)?,
|
|
350
|
+
row.get::<_, String>(2)?,
|
|
351
|
+
))
|
|
352
|
+
})?;
|
|
353
|
+
|
|
354
|
+
for user in users {
|
|
355
|
+
println!("{:?}", user?);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
Ok(())
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Use Cases
|
|
363
|
+
|
|
364
|
+
- **Embedded databases** - Mobile apps, desktop apps, single-user applications
|
|
365
|
+
- **Testing** - Fast, in-memory or file-based test databases
|
|
366
|
+
- **Prototyping** - Quick database without server setup
|
|
367
|
+
- **Small applications** - Low-traffic websites, personal projects
|
|
368
|
+
- **Local caching** - Store data locally without network overhead
|
|
369
|
+
- **Data analysis** - Query CSV/JSON data imported into SQLite
|
|
370
|
+
- **Learning SQL** - Simple, no-configuration database for education
|
|
371
|
+
|
|
372
|
+
**Integrates well with:**
|
|
373
|
+
|
|
374
|
+
- Node.js, Python, .NET, Go, Rust (all have excellent SQLite support)
|
|
375
|
+
- Any application needing embedded database
|
|
376
|
+
- File-based projects (no network required)
|
|
377
|
+
|
|
378
|
+
## Troubleshooting
|
|
379
|
+
|
|
380
|
+
### Issue: Database is locked
|
|
381
|
+
|
|
382
|
+
**Symptoms:**
|
|
383
|
+
|
|
384
|
+
- "database is locked" error
|
|
385
|
+
- Timeout when writing
|
|
386
|
+
|
|
387
|
+
**Solution:**
|
|
388
|
+
|
|
389
|
+
```bash
|
|
390
|
+
# Only one writer allowed at a time
|
|
391
|
+
# Close all open connections before writing
|
|
392
|
+
|
|
393
|
+
# In Python:
|
|
394
|
+
conn.close()
|
|
395
|
+
|
|
396
|
+
# Check for .db-wal and .db-shm files (Write-Ahead Logging)
|
|
397
|
+
ls -la *.db*
|
|
398
|
+
|
|
399
|
+
# Force checkpoint (close WAL)
|
|
400
|
+
sqlite3 myapp.db "PRAGMA wal_checkpoint(FULL);"
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Issue: litecli not found
|
|
404
|
+
|
|
405
|
+
**Symptoms:**
|
|
406
|
+
|
|
407
|
+
- `litecli: command not found`
|
|
408
|
+
|
|
409
|
+
**Solution:**
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
# litecli requires Python
|
|
413
|
+
# Install Python overlay for litecli support
|
|
414
|
+
|
|
415
|
+
# Or install manually:
|
|
416
|
+
pip install --user litecli
|
|
417
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Issue: Database file not found
|
|
421
|
+
|
|
422
|
+
**Symptoms:**
|
|
423
|
+
|
|
424
|
+
- "unable to open database file"
|
|
425
|
+
|
|
426
|
+
**Solution:**
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# Check file path is correct
|
|
430
|
+
ls -la myapp.db
|
|
431
|
+
|
|
432
|
+
# Use absolute path
|
|
433
|
+
sqlite3 /workspace/myapp.db
|
|
434
|
+
|
|
435
|
+
# Or ensure you're in the correct directory
|
|
436
|
+
cd /workspace
|
|
437
|
+
sqlite3 myapp.db
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Issue: Corrupted database
|
|
441
|
+
|
|
442
|
+
**Symptoms:**
|
|
443
|
+
|
|
444
|
+
- "database disk image is malformed"
|
|
445
|
+
|
|
446
|
+
**Solution:**
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
# Try to dump and recreate
|
|
450
|
+
sqlite3 myapp.db .dump > backup.sql
|
|
451
|
+
mv myapp.db myapp.db.corrupted
|
|
452
|
+
sqlite3 myapp_new.db < backup.sql
|
|
453
|
+
|
|
454
|
+
# Run integrity check
|
|
455
|
+
sqlite3 myapp.db "PRAGMA integrity_check;"
|
|
456
|
+
|
|
457
|
+
# If salvageable, export and reimport
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Issue: Performance issues
|
|
461
|
+
|
|
462
|
+
**Symptoms:**
|
|
463
|
+
|
|
464
|
+
- Slow inserts/updates
|
|
465
|
+
- Database growing large
|
|
466
|
+
|
|
467
|
+
**Solution:**
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
# Use transactions for bulk inserts
|
|
471
|
+
sqlite3 myapp.db "
|
|
472
|
+
BEGIN TRANSACTION;
|
|
473
|
+
INSERT INTO users ...;
|
|
474
|
+
INSERT INTO users ...;
|
|
475
|
+
COMMIT;
|
|
476
|
+
"
|
|
477
|
+
|
|
478
|
+
# Enable WAL mode (better concurrency)
|
|
479
|
+
sqlite3 myapp.db "PRAGMA journal_mode=WAL;"
|
|
480
|
+
|
|
481
|
+
# Analyze query performance
|
|
482
|
+
sqlite3 myapp.db "EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'test@example.com';"
|
|
483
|
+
|
|
484
|
+
# Create indexes
|
|
485
|
+
sqlite3 myapp.db "CREATE INDEX idx_users_email ON users(email);"
|
|
486
|
+
|
|
487
|
+
# Vacuum to reclaim space
|
|
488
|
+
sqlite3 myapp.db "VACUUM;"
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
## Performance Tips
|
|
492
|
+
|
|
493
|
+
1. **Use transactions** for bulk operations:
|
|
494
|
+
|
|
495
|
+
```sql
|
|
496
|
+
BEGIN TRANSACTION;
|
|
497
|
+
-- Multiple INSERT/UPDATE statements
|
|
498
|
+
COMMIT;
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
2. **Enable WAL mode** for better concurrency:
|
|
502
|
+
|
|
503
|
+
```sql
|
|
504
|
+
PRAGMA journal_mode=WAL;
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
3. **Create indexes** on frequently queried columns:
|
|
508
|
+
|
|
509
|
+
```sql
|
|
510
|
+
CREATE INDEX idx_users_email ON users(email);
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
4. **Use prepared statements** in application code (prevents SQL injection, faster)
|
|
514
|
+
|
|
515
|
+
5. **Vacuum regularly** to reclaim space:
|
|
516
|
+
```sql
|
|
517
|
+
VACUUM;
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
## Security Considerations
|
|
521
|
+
|
|
522
|
+
⚠️ **File-based security:**
|
|
523
|
+
|
|
524
|
+
- SQLite databases are single files - protect file permissions
|
|
525
|
+
- No built-in user authentication/authorization
|
|
526
|
+
- Applications must implement access control
|
|
527
|
+
|
|
528
|
+
**Best practices:**
|
|
529
|
+
|
|
530
|
+
1. **File permissions:**
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
# Restrict database file access
|
|
534
|
+
chmod 600 myapp.db
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
2. **Use parameterized queries** to prevent SQL injection:
|
|
538
|
+
|
|
539
|
+
```python
|
|
540
|
+
# Good
|
|
541
|
+
cursor.execute('SELECT * FROM users WHERE email = ?', (email,))
|
|
542
|
+
|
|
543
|
+
# Bad (SQL injection vulnerable)
|
|
544
|
+
cursor.execute(f'SELECT * FROM users WHERE email = "{email}"')
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
3. **Encrypt sensitive data:**
|
|
548
|
+
|
|
549
|
+
```bash
|
|
550
|
+
# Use SQLCipher for encrypted databases
|
|
551
|
+
# Or encrypt database file at OS level
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
4. **Backup regularly:**
|
|
555
|
+
```bash
|
|
556
|
+
# Automated backups
|
|
557
|
+
sqlite3 myapp.db ".backup /backups/myapp_$(date +%Y%m%d).db"
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
## Related Overlays
|
|
561
|
+
|
|
562
|
+
- **nodejs** - Node.js with better-sqlite3 support
|
|
563
|
+
- **python** - Python with built-in sqlite3 module (enables litecli)
|
|
564
|
+
- **dotnet** - .NET with Microsoft.Data.Sqlite
|
|
565
|
+
- No service dependencies - works standalone
|
|
566
|
+
|
|
567
|
+
## Additional Resources
|
|
568
|
+
|
|
569
|
+
- [Official SQLite Documentation](https://www.sqlite.org/docs.html)
|
|
570
|
+
- [SQLite Tutorial](https://www.sqlitetutorial.net/)
|
|
571
|
+
- [litecli GitHub](https://github.com/dbcli/litecli)
|
|
572
|
+
- [SQLite Viewer Extension](https://marketplace.visualstudio.com/items?itemName=qwtel.sqlite-viewer)
|
|
573
|
+
- [When to Use SQLite](https://www.sqlite.org/whentouse.html)
|
|
574
|
+
|
|
575
|
+
## Notes
|
|
576
|
+
|
|
577
|
+
- SQLite is **not** a client-server database - it's embedded in your application
|
|
578
|
+
- Perfect for **development, testing, and small-to-medium applications**
|
|
579
|
+
- Database is a **single file** - easy to copy, backup, version control
|
|
580
|
+
- **No network overhead** - faster than client-server databases for local use
|
|
581
|
+
- **ACID compliant** - full transaction support
|
|
582
|
+
- **Cross-platform** - database files work across Windows, macOS, Linux
|
|
583
|
+
- **Widely supported** - drivers available for virtually every language
|
|
584
|
+
- litecli requires Python - install Python overlay for enhanced CLI experience
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "sqlite3",
|
|
6
|
+
"apk": "sqlite"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"customizations": {
|
|
10
|
+
"vscode": {
|
|
11
|
+
"extensions": ["qwtel.sqlite-viewer", "alexcvzz.vscode-sqlite"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SQLite setup script - installs litecli for better CLI experience
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🔧 Setting up SQLite tools..."
|
|
7
|
+
|
|
8
|
+
# Install litecli via pip if Python is available
|
|
9
|
+
if command -v pip &> /dev/null || command -v pip3 &> /dev/null; then
|
|
10
|
+
echo "📦 Installing litecli..."
|
|
11
|
+
if command -v pip3 &> /dev/null; then
|
|
12
|
+
pip3 install --user litecli || echo "⚠️ litecli installation failed, continuing..."
|
|
13
|
+
else
|
|
14
|
+
pip install --user litecli || echo "⚠️ litecli installation failed, continuing..."
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Add to PATH if not already there
|
|
18
|
+
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
|
|
19
|
+
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
|
|
20
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
21
|
+
fi
|
|
22
|
+
else
|
|
23
|
+
echo "⚠️ Python/pip not found, skipping litecli installation"
|
|
24
|
+
echo " Install Python overlay for enhanced SQLite CLI (litecli)"
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
echo "✅ SQLite setup complete"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for SQLite overlay
|
|
3
|
+
# Confirms SQLite and tools are installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying SQLite overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check sqlite3 is installed
|
|
11
|
+
echo "1️⃣ Checking sqlite3..."
|
|
12
|
+
if command -v sqlite3 &> /dev/null; then
|
|
13
|
+
sqlite3 --version
|
|
14
|
+
echo " ✅ sqlite3 found"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ sqlite3 not found"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check litecli (optional)
|
|
21
|
+
echo ""
|
|
22
|
+
echo "2️⃣ Checking litecli (optional enhanced CLI)..."
|
|
23
|
+
if command -v litecli &> /dev/null; then
|
|
24
|
+
litecli --version
|
|
25
|
+
echo " ✅ litecli found"
|
|
26
|
+
else
|
|
27
|
+
echo " ⚠️ litecli not found (optional - install Python overlay for litecli)"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Test SQLite functionality
|
|
31
|
+
echo ""
|
|
32
|
+
echo "3️⃣ Testing SQLite functionality..."
|
|
33
|
+
TEST_DB="/tmp/test_sqlite.db"
|
|
34
|
+
if sqlite3 "$TEST_DB" "CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT); INSERT INTO test (value) VALUES ('hello'); SELECT * FROM test;" &> /dev/null; then
|
|
35
|
+
echo " ✅ SQLite is functional"
|
|
36
|
+
rm -f "$TEST_DB"
|
|
37
|
+
else
|
|
38
|
+
echo " ❌ SQLite functionality test failed"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
echo ""
|
|
43
|
+
echo "✅ SQLite overlay verification complete"
|