aboutsummaryrefslogtreecommitdiff
path: root/lib/App/MediaControl/DB.rakumod
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2021-12-30 17:06:35 +0000
committerdakkar <dakkar@thenautilus.net>2021-12-30 17:06:35 +0000
commitd8623278929c620e22cfb943b5724c66e5f5fb91 (patch)
tree9bb2612b84236360afc07de10d46c547aeca87b5 /lib/App/MediaControl/DB.rakumod
parentfix wrapping (diff)
downloadmedia-control-d8623278929c620e22cfb943b5724c66e5f5fb91.tar.gz
media-control-d8623278929c620e22cfb943b5724c66e5f5fb91.tar.bz2
media-control-d8623278929c620e22cfb943b5724c66e5f5fb91.zip
batch inserts!
Diffstat (limited to 'lib/App/MediaControl/DB.rakumod')
-rw-r--r--lib/App/MediaControl/DB.rakumod23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/App/MediaControl/DB.rakumod b/lib/App/MediaControl/DB.rakumod
index 20fe956..f4e908c 100644
--- a/lib/App/MediaControl/DB.rakumod
+++ b/lib/App/MediaControl/DB.rakumod
@@ -54,19 +54,28 @@ class App::MediaControl::DB {
END
}
}
-
- method add-entry(Str:D() :$path! is copy, Str:D() :$name!, Bool:D() :$is-dir!) {
- $path ~~ s{<!after '/'>$} = '/';
- $path ~~ s{<!before '/'>^} = '/';
- note "add-entry($path,$name)";
+ subset Entry of Associative where :(
+ Str:D() :path($)! is copy,
+ Str:D() :name($)!,
+ Bool:D() :is-dir($)!,
+ );
+ method add-entries(@entries where { .all ~~ Entry }) {
+ my $values = 'VALUES ' ~ ('(?, ?, ?)' xx @entries).join(',');
+ my @binds = @entries.map(
+ -> (:$path is copy, :$name, :$is-dir) {
+ $path ~~ s{<!after '/'>$} = '/';
+ $path ~~ s{<!before '/'>^} = '/';
+ ($path,$name,$is-dir).Slip;
+ });
+
self!db: {
- .query(q:to/END/, :$path, :$name, :is_dir($is-dir));
+ .query(qq:to/END/, |@binds);
WITH parent(id,path) AS (
SELECT id, path || name || '/' FROM files
),
newrow(path,name,is_dir) AS (
- VALUES($path, $name, $is_dir)
+ $values
)
INSERT INTO files(parent_id,path,name,is_dir,seen)
SELECT id, newrow.path, name, is_dir, true