README

NAME

SQL::Builder::ExecuteWithDBIish - Execute SQL::Builder queries with DBIish

SYNOPSIS

use SQL::Builder::ExecuteWithDBIish;

my $sql = SQL::Builder::ExecuteWithDBIish;
$sql.execute($sql.insert-into('foo').data(:a<b>, :c<d>));

say $sql.all($sql.from('foo').select(:all));
# result: ({"a" => "b", "c" => "d"},)
say $sql.one($sql.from('foo').select(:all));
# result: {"a" => "b", "c" => "d"}
say $sql.scalar($sql.from('foo').select('a'));
# result: "b"

DESCRIPTION

SQL::Builder::ExecuteWithDBIish is a minimal wrapper around SQL::Builder that provides some helper methods to execute the resulting queries with DBIish. These methods all take a SQLStatement from SQL::Builder as input, which brings the execution and resulting data structure to the front of the statement, making it easier to see what's going on.

It also delegates the main four methods of SQL::Builder (from, insert-into, update, and delete-from) which create the four types of Builder objects, plus several helper methods to execute the results, so most code can use this object instead of SQL::Builder rather than having to keep both around.

METHODS

new(:builder])

Constructs an instance of SQL::Builder::ExecuteWithDBIish. The db named parameter is required and should be the result of DBIish.connect. The optional builder parameter is an instance of SQL::Builder, and allows you to configure said instance.

execute(SQLStatement $s)

Builds and executes the provided SQLStatement, returning the DBIish result object. Typically this is used for statements which don't return rows, such as insert/update/delete (without a returning clause).

all(SQLStatement $s)

Builds and executes the provided SQLStatement, returning an array of hashes resulting from this statement.

my @data = $sql.all($sql.from('table').select('a', 'b'));

one(SQLStatement $s)

Builds and executes the provided SQLStatement, returning a hash of the resulting data. Ensures that there is exactly one row returned. If no rows are returned, then a NoResults Exception is raised, and if more than one row is returned, a TooManyResults Exception is raised.

my $row = $sql.one($sql.from('table').select('a', 'b'));
# raises an exception if there is not exactly one result

scalar(SQLStatement $s)

Builds and executes the provided SQLStatement, returning a single value of resulting data. Ensures that there is exactly one row returned, with exactly one field. If no rows are returned, then a NoResults Exception is raised, and if more than one row is returned, a TooManyResults Exception is raised. If the resulting row has more than one column, then TooManyColumns Exception is raised.

my $count = $sql.scalar($sql.from('table').select(Fn.new('count', 'a')));

from

Proxy method for SQL::Builder.from. See SQL::Builder.

insert-into

Proxy method for SQL::Builder.insert-into. See SQL::Builder.

update

Proxy method for SQL::Builder.update. See SQL::Builder.

delete-from

Proxy method for SQL::Builder.delete-from. See SQL::Builder.

SEE ALSO

SQL::Builder

DBIish

AUTHOR

Adrian Kreher [email protected]

COPYRIGHT AND LICENSE

Copyright 2023 Adrian Kreher

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

SQL::Builder::ExecuteWithDBIish v0.0.1

Execute SQL::Builder queries with DBIish

Authors

  • Adrian Kreher

License

Artistic-2.0

Dependencies

DBIishSQL::Builder

Test Dependencies

Provides

  • SQL::Builder::ExecuteWithDBIish

Documentation

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.