1+ ' autorun.brs - BrightScript example for SQLite DB usage
2+ ' This script demonstrates creating a DB, inserting, reading,
3+ ' deleting records, and closing the DB.
4+
5+ Sub Main ()
6+ port = CreateObject ("roMessagePort " )
7+ m .nodejs = CreateObject ("roNodeJs " , "SD:/index.js" , { message_port : port })
8+
9+ dbPath$ = "SD:/example.db"
10+
11+ ' Event Loop
12+ while true
13+ ev = wait (0 , port )
14+ ' print "=== BS: Received event ";type(ev)
15+ if type (ev ) = "roNodeJsEvent " then
16+ eventData = ev .GetData ()
17+ if type (eventData ) = "roAssociativeArray " and type (eventData .reason ) = "roString " then
18+ if eventData .reason = "process_exit" then
19+ print "=== BS: Node.js instance exited with code " ; eventData .exit_code
20+ if m .db <> invalid then
21+ m .db .Close ()
22+ print "Database closed."
23+ end if
24+
25+ else if eventData .reason = "message" then
26+ print "=== BS: Received message from JS app: " ; eventData .message
27+
28+ if type (eventData .message ) = "roAssociativeArray " then
29+ if eventData .message .action = "ready" then
30+ print "=== index.js loaded: " ; eventData .message .message
31+
32+ ' Create the SQLite database
33+ m .db = CreateObject ("roSqliteDatabase " )
34+ m .db .SetPort (port )
35+ if m .db .Create (dbPath$ ) then
36+ m .nodejs .PostJSMessage ({ action : "dbCreated" , path : dbPath$ })
37+ else
38+ print "Failed to create database. Exiting."
39+ stop
40+ end if
41+ else if eventData .message .action = "create" then
42+ createOk = CreateTable (eventData .message .command )
43+ if not createOk then
44+ print "Failed to create table: " ; eventData .message .command
45+ stop
46+ end if
47+ else if eventData .message .action = "insert" then
48+ insertOk = InsertRecords (eventData .message .command )
49+ if not insertOk then
50+ print "Failed to insert record: " ; cmd
51+ stop
52+ end if
53+ else if eventData .message .action = "select" then
54+ records = SelectRecords (eventData .message .command )
55+ if records = invalid then
56+ print "Failed to retrieve records: " ; eventData .message .command
57+ stop
58+ end if
59+ else if eventData .message .action = "delete" then
60+ deleteOk = DeleteRecord (eventData .message .command )
61+ if not deleteOk then
62+ print "Failed to delete record: " ; eventData .message .command
63+ stop
64+ end if
65+ else
66+ print "=== BS: Unknown action: " ; eventData .message .action
67+ end if
68+ else
69+ print "=== BS: Unknown message type: " ; type (eventData .message )
70+ end if
71+ else
72+ print "======= UNHANDLED NODEJS EVENT ========="
73+ print eventData .reason
74+ endif
75+ else
76+ print "=== BS: Unknown eventData: " ; type (eventData )
77+ endif
78+ endif
79+ end while
80+ end Sub
81+
82+ Function CreateTable (createSQL as string ) as boolean
83+ stmt = m .db .CreateStatement (createSQL )
84+ if type (stmt ) = "roSqliteStatement " then
85+ result = stmt .Run ()
86+ if result <> 100 then
87+ print "Failed to create table."
88+ return false
89+ end if
90+ m .nodejs .PostJSMessage ({ action : "create" , command : createSQL })
91+ stmt .Finalise ()
92+ return true
93+ else
94+ return false
95+ end if
96+ end Function
97+
98+ Function InsertRecords (insertSQL as string ) as boolean
99+ insertStmt = m .db .CreateStatement (insertSQL )
100+ if type (insertStmt ) = "roSqliteStatement " then
101+ result = insertStmt .Run ()
102+ if result <> 100 then
103+ print "Failed to insert record"
104+ return false
105+ end if
106+ m .nodejs .PostJSMessage ({ action : "insert" , command : insertSQL })
107+ insertStmt .Finalise ()
108+ return true
109+ else
110+ return false
111+ end if
112+ end Function
113+
114+ Function SelectRecords (selectSQL as string ) as dynamic
115+ stmt = m .db .CreateStatement (selectSQL )
116+ if type (stmt ) = "roSqliteStatement " then
117+ sqlResult = stmt .Run ()
118+ records = []
119+ while sqlResult = 102
120+ resultsData = stmt .GetData ()
121+ ' print resultsData
122+ records .push (resultsData )
123+ sqlResult = stmt .Run ()
124+ end while
125+
126+ ' Stringify the records array since the roAssociativeArray sent
127+ ' as imput to PostJSMessage() cannot contain an roArray type.
128+ resultAsString = FormatJson (records )
129+ m .nodejs .PostJSMessage ({ action : "select" , command : selectSQL , result : resultAsString })
130+ stmt .Finalise ()
131+ return records
132+ else
133+ return invalid
134+ end if
135+ end Function
136+
137+ Function DeleteRecord (deleteSQL as string ) as boolean
138+ deleteStmt = m .db .CreateStatement (deleteSQL )
139+ if type (deleteStmt ) = "roSqliteStatement " then
140+ result = deleteStmt .Run ()
141+ ' print "Deleted record, result: "; result
142+ m .nodejs .PostJSMessage ({ action : "delete" , command : deleteSQL })
143+ deleteStmt .Finalise ()
144+ return true
145+ else
146+ return false
147+ end if
148+ end Function
0 commit comments