Wie wird REGEXP in SQLite3 und Rails 3.1 aktiviert?

8

Ich habe die folgende Anweisung in Rails 3 mit einer SQLite3-Datenbank:

%Vor%

Wenn ich dies unter SQLite3 ausführe, bekomme ich immer:

  

SQLite3 :: SQLException: keine solche Funktion: REGEXP

Ich habe in der SQLite3-Dokumentation gelesen, dass es tatsächlich die REGEXP-Funktion unterstützt. In meiner gemfile habe ich die Zeile

%Vor%

Und meine Datenbankkonfigurationsdatei sieht so aus:

%Vor%

Irgendwelche Ideen, was ist los?

AUFLÖSUNG: Am Ende fand ich diese Lösung . Leider funktioniert es nicht für Rails 3. Um reguläre Ausdrücke zu verwenden, wechselte ich zu MYSQL anstatt zu SQLite3.

    
Yuval Karmi 27.07.2011, 03:37
quelle

5 Antworten

13

Ich stieß auf das gleiche Problem. Ich nahm den in der Auflösung verwendeten Code, portierte ihn für die Arbeit mit Rails 3+ und machte einen Edelstein für die einfachere Verwendung. Ich hoffe, das hilft.

Ссылка

    
Aaron Lasseigne 11.11.2011, 03:19
quelle
7

Aus dem guten Handbuch :

  

Der REGEXP-Operator ist eine spezielle Syntax für die Benutzerfunktion regexp (). Keine regexp () - Benutzerfunktion ist standardmäßig definiert, daher führt die Verwendung des REGEXP-Operators normalerweise zu einer Fehlermeldung. Wenn zur Laufzeit eine anwendungsdefinierte SQL-Funktion namens "regexp" hinzugefügt wird, wird diese Funktion aufgerufen, um den REGEXP-Operator zu implementieren.

Also unterstützt die Grammatik REGEXP, aber die Standard-SQLite-Bibliothek bietet keine Implementierung dafür. Sie müssen Ihre eigene Implementierung durch ein C-Gerangel verbinden, wenn Sie so etwas wollen oder brauchen.

Vermutlich ist das Grundprinzip, dass die SQLite-Leute SQLite so klein und eng wie möglich halten wollen, aber das Hinzufügen einer ganzen Bibliothek für reguläre Ausdrücke würde Gewicht hinzufügen, das die meisten Leute nicht wollen. Außerdem müssten sie eine Bibliothek für reguläre Ausdrücke auswählen und sie in die SQLite-Quelle einbeziehen, oder sie müssten sich mit den Launen der regulären Unterstützung für reguläre Ausdrücke in libc abfinden. Ich bin keiner der SQLite-Entwickler, also ist dies reine Spekulation.

Ich nehme an, dass Sie sich wahrscheinlich mit LIKE und GLOB begnügen müssen. Die Verwendung von LIKE wird eine tragbarere Lösung bieten.

    
mu is too short 27.07.2011 03:49
quelle
2

Ich hatte eine ähnliche Frage und fand einen Edelstein namens wherex , der gut dokumentiert ist und sofort einsatzbereit ist.

Dein Ausdruck von oben

%Vor%

wäre da

%Vor%

Funktioniert wie ein Zauber für mich: -)

    
mliebelt 22.12.2011 11:42
quelle
2

Sie können sich im Paket sqlite3-pcre wohlfühlen, das REGEXP für SQLite implementiert.

Siehe diesen Kommentar zu einem ähnlichen Problem.

    
tricasse 27.12.2012 16:29
quelle
0

Aus der Quelle des sqlite3_ar_regexp-Projekts entnehme ich Folgendes:

%Vor%     
raubarede 16.07.2015 14:17
quelle