NAME
Quiq::Sql::Composer - Klasse zum Erzeugen von SQL-Code
BASE CLASS
SYNOPSIS
Instantiierung:
$s = Quiq::Sql::Composer->new($dbms); # Name eines DBMS (siehe Basisklasse)
$s = Quiq::Sql::Composer->new($db); # Instanz einer Datenbankverbindung
Alias:
$sql = $s->alias($expr,$alias);
CASE:
$sql = $s->case($expr,@pairs,@opt);
$sql = $s->case($expr,@pairs,$else,@opt);
METHODS
Ausdrücke
alias() - Ergänze Ausdruck um Alias
Synopsis
$sql = $s->alias($expr,$alias);
Arguments
Returns
Ausdruck mit Alias (String)
Description
Ergänze den Ausdruck $expr um den Alias $alias und liefere das Resultat zurück.
Example
$sql = $s->alias('LOWER(name)','name');
==>
"LOWER(name) AS name"
case() - Erzeuge CASE-Ausdruck
Synopsis
$sql = $s->case($expr,@pairs,@opt);
$sql = $s->case($expr,@pairs,$else,@opt);
Arguments
Options
- -fmt => 'm'|'i' (Default: 'm')
-
Erzeuge einen mehrzeiligen (m=multiline) oder einen einzeiligen (i=inline) Ausdruck.
Returns
CASE-Ausdruck (String)
Description
Erzeuge einen CASE-Ausdruck und liefere diesen zurück.
Examples
Übersetze Wochentagsnummer in Wochentagskürzel (SQLite)
$sql = $s->case("strftime('%w', datum)",0=>'So',1=>'Mo',2=>'Di', 3=>'Mi',4=>'Do',5=>'Fr',6=>'Sa'); ==> "CASE strftime('%w', datum) WHEN '0' THEN 'So' WHEN '1' THEN 'Mo' WHEN '2' THEN 'Di' WHEN '3' THEN 'Mi' WHEN '4' THEN 'Do' WHEN '5' THEN 'Fr' WHEN '6' THEN 'Sa' END"
Übersetze 1, 0 in 'Ja', 'Nein', einzeiliger Ausdruck
$sql = $s->case('bearbeitet',1=>'Ja','Nein',-fmt=>'i'); ==> "CASE bearbeitet WHEN '1' THEN 'Ja' ELSE 'Nein' END"
Ausdruck statt Sting-Literal (NULL)
$sql = $s->case('bearbeitet',1=>'Ja',0=>'Nein',\'NULL',-fmt=>'i'); ==> "CASE bearbeitet WHEN '1' THEN 'Ja' WHEN '0' THEN 'Nein' ELSE NULL END"
Elementare Ausdrücke
expr() - Erzeuge Ausdruck
Synopsis
$sql = $s->expr($expr);
$sql = $s->expr(\$val);
Arguments
- $expr
-
Ausdruck, der unverändert geliefert wird.
- $val
-
Wert, der in ein SQL String-Literals gewandelt wird (siehe Methode $s->stringLiteral()).
Returns
Ausdruck oder String-Literal (String)
Description
Liefere den Ausdruck $expr oder den in den in ein Stringliteral gewandelten Wert $val zurück.
valExpr() - Erzeuge Wert-Ausdruck
Synopsis
$sql = $s->valExpr($val);
$sql = $s->valExpr(\$expr);
Arguments
- $val
-
Wert, der in ein SQL String-Literals gewandelt wird (siehe Methode $s->stringLiteral()).
- $expr
-
Ausdruck, der unverändert geliefert wird.
Returns
Stringliteral oder Ausdruck (String)
Description
Liefere den in den in ein Stringliteral gewandelten Wert $val oder den Ausdruck $expr zurück.
stringLiteral() - Erzeuge String-Literal
Synopsis
$sql = $s->stringLiteral($val);
$sql = $s->stringLiteral($val,$default);
Arguments
- $val
-
Wert, der in ein SQL String-Literals gewandelt wird.
- $default
-
Defaultwert, der in ein SQL String-Literals gewandelt wird. Als Defaultwert kann auch ein Ausdruck angegeben werden, der nicht in ein Stringliteral gewandelt wird, wenn diesem ein Backslash (\) vorangestellt wird.
Returns
Stringliteral oder Ausdruck (String)
Description
Wandele den Wert $val in ein SQL-Stringliteral und liefere dieses zurück. Hierbei werden alle in $str enthaltenen einfachen Anführungsstriche verdoppelt und der gesamte String in einfache Anführungsstriche eingefasst. Ist der String leer ('' oder undef) liefere einen Leerstring (kein leeres String-Literal!). Ist $default angegeben, liefere diesen Wert als Stringliteral.
Anmerkung: PostgreSQL erlaubt aktuell Escape-Sequenzen in String-Literalen. Wir behandeln diese nicht. Escape-Sequenzen sollten in postgresql.conf abgeschaltet werden mit der Setzung:
standard_conforming_strings = on
Examples
Eingebettete Anführungsstriche
$s->stringLiteral("Sie hat's"); ==> "'Sie hat''s'"
Leerstring, wenn kein Wert
$s->stringLiteral(''); ==> ""
Defaultwert, wenn kein Wert
$s->stringLiteral('','schwarz'); ==> "'schwarz'"
Ausdruck als Defaultwert, wenn kein Wert
$s->stringLiteral('',\'NULL'); ==> "NULL"
VERSION
1.220
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2024 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.