NAME
JsonSQL::Query::Insert - JsonSQL::Query::Insert object. Stores a Perl representation of a set of INSERT statements created from a JSON string.
VERSION
version 0.4
SYNOPSIS
Use this to generate an SQL INSERT statement from a JSON string.
To use this:
use JsonSQL::Query::Insert;
my $jsonString = '{
"inserts": [
{
"table": {"table": "table1", "schema": "MySchema"},
"values": [
{"column": "column1", "value": "value1"},
{"column": "column2", "value": "value2"}
],
"returning": [{"column": "column1", "as": "bestcolumn"}, {"column": "column2"}]
},
{
"table": {"table": "table2"},
"values": [
{"column": "columnA", "value": "valueA"},
{"column": "columnB", "value": "valueB"}
]
}
]
}';
my $whitelisting_rules = [
{ schema => '#anySchema', 'table1' => [ 'column1', 'column2' ], 'table2' => [ 'columnA', 'columnB' ] }
];
my ( $insertObj, $err ) = JsonSQL::Query::Insert->new($whitelisting_rules, $jsonString);
if ( $insertObj ) {
my ( $sql, $binds ) = $insertObj->get_all_inserts;
<...>
} else {
die $err;
}
Now you can go ahead and use $sql and $binds directly with the DBI module to do the query.
DESCRIPTION
This is a JsonSQL Query module that supports SQL generation for batched INSERT statements.
Examples of INSERT features supported by this module:
A single INSERT statement (minimum),
{
"inserts": [
{
"table": {"table": "MyTable"},
"values": [
{"column": "Animal", "value": "Giraffe"},
{"column": "Color", "value": "Yellow/Brown"}
]
}
]
}
An INSERT statement with a RETURNING clause,
{
"inserts": [
{
"table": {"table": "MyTable"},
"values": [
{"column": "Animal", "value": "Giraffe"},
{"column": "Color", "value": "Yellow/Brown"}
],
"returning": [
{"column": "animal_id"}
]
}
]
}
Multiple INSERT statements for batch processing,
{
"inserts": [
{
"table": {"table": "MyTable"},
"values": [
{"column": "Animal", "value": "Giraffe"},
{"column": "Color", "value": "Yellow/Brown"}
]
},
{
"table": {"table": "MyTable"},
"values": [
{"column": "Animal", "value": "Elephant"},
{"column": "Color", "value": "Grey"}
]
},
{
"table": {"table": "MyTable"},
"values": [
{"column": "Animal", "value": "Horse"},
{"column": "Color", "value": "Black"}
]
}
]
}
Structure of INSERT JSON object:
The top-level property is the "inserts" property, which is an array of objects representing each INSERT. Each INSERT object has the following properties:
Required,
- table => { table => "table1" }
-
Generates: INSERT INTO 'table1' See L<JsonSQL::Param::Table> for more info.
- values => [ { column => "scientist", value = "Einstein" }, { column => "theory", value = "Relativity" } ]
-
Generates ('scientist','theory') VALUES (?,?) Bind: ['Einstein','Relativity'] See L<JsonSQL::Param::InsertValues> for more info.
Optional,
- returning => { column => "column_id" }
-
Generates: RETURNING 'column_id'; See L<JsonSQL::Param::Insert> for more info.
Additional Properties,
- defaultschema => 'myschema'
-
If you are using DB schemas, this property can be used to generate the schema identifier for your queries. Particularly useful for per-user DB schemas.
See JsonSQL::Schemas::insert to view the restrictions enforced by the JSON schema.
Whitelisting Module
A set of whitelisting rules is required to successfully use this module to generate SQL. See JsonSQL::Validator to learn how this works.
METHODS
Constructor new($query_rulesets, $json_query)
Instantiates and returns a new JsonSQL::Query::Insert object.
$query_rulesets => The whitelisting rules to validate the query with.
$json_query => A stringified JSON object representing the query.
Returns (0, <error message>) on failure.
ObjectMethod get_all_inserts -> ( $sql, $binds )
Generates the SQL statement represented by the object. Returns:
$sql => An arrayref of SQL INSERT strings.
$binds => An arrayref of arrays of parameterized values to pass with each INSERT query.
AUTHOR
Chris Hoefler <bhoefler@draper.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Chris Hoefler.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.