Zur Zeit ist es so, dass in
App::DBBrowser mit
my $data_types = $sth->{TYPE};
die Datentypen ermittelt werden und dann Usereingaben entsprechen der Datentypen gequoted werden:
if ( $is_numeric_data_type{$col} ) {
return $value;
}
else {
return $dbh->quote( $value );
}
Jetzt frage ich mich (nur für SQLite), ob es besser wäre, entsprechend der Art der eingegebenen Werte zu entscheiden, ob gequoted wird oder nicht:
if ( looks_like_number $value ) {
return $value;
}
else {
return $dbh->quote( $value );
}
Warum es zu dieser Frage gekommen ist - hier ein Beispiel:
id | vorname | nachname
---|---------|-----------
1 | Max | Mustermann
2 | Lena | Müller
3 | Jonas | Schmidt
4 | Lisa | Schneider
5 | Tim | Fischer
6 | Max | Mustermann
7 | Lena | Müller
8 | Paul | Meier
9 | Anna | Huber
10 | Julia | Wagner
Gequoted entsprechend des Datentyps:
SELECT *
FROM (SELECT "id", "vorname", "nachname", ROW_NUMBER() OVER (PARTITION BY "vorname","nachname" ORDER BY "id" ASC) AS "rn" FROM "namen") "t1"
WHERE "rn" > '1'
id | vorname | nachname | rn
---|---------|----------|---
Gequoted entsprechend der Art des Wertes:
SELECT *
FROM (SELECT "id", "vorname", "nachname", ROW_NUMBER() OVER (PARTITION BY "vorname","nachname" ORDER BY "id" ASC) AS "rn" FROM "namen") "t1"
WHERE "rn" > 1
id | vorname | nachname | rn
---|---------|------------|---
7 | Lena | Müller | 2
6 | Max | Mustermann | 2
Im ersten Fall wird die eingegebene Konstante (1) gequoted, weil
DBD::SQLite VARCHAR als Fallback-Datentyp einsetzt, wenn kein deklarierter Datentyp vorhanden ist.
Welche Lösung ist vorteilhafter?