NAME

Quiq::Sql::Composer - Klasse zum Erzeugen von SQL-Code

BASE CLASS

Quiq::Dbms

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

$expr

Ausdruck, wie er in einer Select-Liste auftreten kann (expr).

$alias

Alias für den Ausdruck.

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

$expr

CASE-Ausdruck (expr)

@pairs

Liste von WHEN/THEN-Paaren (valExpr)

$else

ELSE-Wert (valExpr)

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.188

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2020 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.