@@ -11,12 +11,12 @@ class User {
1111
1212 User ({this .id, required this .name, required this .email});
1313
14- /// For mapping query results
14+ /// For mapping query results.
1515 factory User .fromMap (Map <String , dynamic > data) {
1616 return User (id: data['id' ], name: data['name' ], email: data['email' ]);
1717 }
1818
19- /// Used for query parameters
19+ /// JSON representation, used for query parameters.
2020 Map <String , dynamic > toJson () {
2121 return {'id' : id, 'name' : name, 'email' : email};
2222 }
@@ -27,6 +27,14 @@ class User {
2727 }
2828
2929 /// Helper to use in queries.
30+ /// This produces an equivalent to:
31+ ///
32+ /// ```sql
33+ /// SELECT
34+ /// json_each.value ->> 'id' as id,
35+ /// json_each.value ->> 'name' as name,
36+ /// json_each.value ->> 'email' as email
37+ /// FROM json_each(?)
3038 static final selectJsonData = selectJsonColumns (['id' , 'name' , 'email' ]);
3139}
3240
@@ -45,20 +53,22 @@ void main() async {
4553 User (name: 'Alice' , email: 'alice@example.org' )
4654 ];
4755
48- // Insert data and get resulting ids
56+ // Insert data and get resulting ids.
57+ // Here, the list of users is automatically encoded as JSON using [User.toJson].
58+ // "RETURNING id" is used to get the auto-generated ids.
4959 var idRows = await db.execute ('''
5060INSERT INTO users(name, email)
5161SELECT name, email FROM (${User .selectJsonData ('?' )})
5262RETURNING id''' , [users]);
5363 var ids = idRows.map ((row) => row['id' ]).toList ();
5464
55- // Alternative , using json1 functions directly
56- await db.execute ('''
65+ // Alternatively , using json1 functions directly.
66+ var idRows2 = await db.execute ('''
5767INSERT INTO users(name, email)
5868SELECT e.value ->> 'name', e.value ->> 'email' FROM json_each(?) e
5969RETURNING id''' , [users]);
6070
61- // Select using "WHERE id IN ..."
71+ // Select using "WHERE id IN ...".
6272 var queriedUsers = (await db.getAll (
6373 "SELECT id, name, email FROM users WHERE id IN (SELECT json_each.value FROM json_each(?)) ORDER BY name" ,
6474 [ids]))
@@ -67,14 +77,14 @@ RETURNING id''', [users]);
6777
6878 print (queriedUsers);
6979
70- // Bulk update using UPDATE FROM
80+ // Bulk update using UPDATE FROM.
7181 await db.execute ('''
7282UPDATE users
7383 SET name = args.name, email = args.email
7484FROM (${User .selectJsonData ('?' )}) as args
7585 WHERE users.id = args.id''' , [queriedUsers]);
7686
77- // Bulk delete using "WHERE id IN ..."
87+ // Bulk delete using "WHERE id IN ...".
7888 await db.execute ('''
7989DELETE FROM users WHERE id IN (SELECT json_each.value FROM json_each(?))''' ,
8090 [queriedUsers.map ((u) => u.id).toList ()]);
0 commit comments