[MySQL 4.1] function_exists?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.1] function_exists?

    Hoihoi,

    hab ein UDF kompiliert um mySQL die Levenshtein-Funktion beizubringen.

    Nun aktiviere ich die Funktion per
    Code:
    CREATE FUNCTION levenshtein RETURNS INTEGER SONAME 'libmysqllevenshtein.so';
    Mit DROP kann ich sie wieder loswerden.

    Nun meine Frage, kann ich irgendwie prüfen ob die Funktion schon existent ist ohne einen Fehler in kauf zu nehmen? (Error: 1125 - Function 'levenshtein' already exists)

    Dank euch.

  • #2
    Entweder du liest die Tabelle mysql.func und schaust, ob es schon einen Eintrag mit dem Namen gibt oder du schaust, ob das im Manual erwähnte
    Code:
    DROP FUNCTION IF EXISTS levenshtein
    funktioniert
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hey, thnx..

      Dann sollte natürlich auch gehn:
      Code:
      CREATE FUNCTION 'levenshtein' RETURNS INTEGER SONAME 'libmysqllevenshtein.so'
       IF NOT EXISTS levenshtein;
      Tut es aber leider nicht.

      Der weg über die mysql-Tabelle ist natürlich auch sinnvoll...
      Zuletzt geändert von prego; 15.08.2005, 10:40.

      Kommentar


      • #4
        Tut es aber leider nicht.
        definiere, ich hab da so ne vermutung.

        Kommentar


        • #5
          Original geschrieben von prego
          Dann sollte natürlich auch gehn:
          Warum?

          Ist das gültige, im Manual erwähnte Syntax?
          Woher hast du das?

          Lösche die Funktion, wenn sie existiert und lege sie danach neu an.
          Das sollte auf jeden Fall gehen.
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Also testen tu ich das ganze mit meinem Frontend mit einem User der alles darf, falls du auf die rechte anspielst


            Code:
            CREATE FUNCTION levenshtein RETURNS INTEGER SONAME 'libmysqllevenshtein.so'
             IF NOT EXISTS levenshtein
            gibt:

            Code:
            Error: 1064 - You have an error in your SQL syntax; check the 
            manual that corresponds to your MySQL server version for the right 
            syntax to use near 'IF NOT EXISTS levenshtein' at line 1

            Ich habe aber noch ein anderes Problem - das Script hat natürlich nicht die Rechte meine Dev-Users. Hab dem Script-User aber SELECT, INSERT und DELETE in der mysql-Tabelle gegeben. Trotzdem bekomm ich einen SQL-Fehler beim ausführen meiner Query.Die CreateFunktion-Query wird vorher im Script abgesetzt. Dei nächste Query beschwert sich dann "near 'levenshtein'"....

            Kommentar


            • #7
              Ist das gültige, im Manual erwähnte Syntax?
              Woher hast du das?
              Ok, nein - hatte nur mal meiner Query-Kreativität freien Lauf gelassen
              Lösche die Funktion, wenn sie existiert und lege sie danach neu an.
              Das sollte auf jeden Fall gehen.
              Sas könnte ich natürlich machen, aber warum die Funktion neu laden, wenn sie noch da ist?

              Kommentar


              • #8
                auf die rechte wollte ich nicht anspielen. aber happy hats ja schon aufgelöst. du danach eigentlich auch.

                Kommentar


                • #9
                  Original geschrieben von prego
                  Sas könnte ich natürlich machen, aber warum die Funktion neu laden, wenn sie noch da ist?
                  Warum nicht?
                  Weil du eventuell eine neue Version einspielen willst?
                  Weil es keine andere Möglichkeit gibt (außer mit ALTER)?
                  Weil du sonst nicht so eifnach feststellen kannst, ob sie schon existiert?

                  Der Code, den du einspielen willst, soll ja auf jeden Fall rein, oder?
                  Du könntest jetzt zuers versuchen mit ALTER die Funktion zu aktualisieren und ggf. vorher noch mit SHOW auslesen und mit vielen schönen IFs hin- und herverzweigen oder du führst einfach immer 2 Anweisungen aus.
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Da geb ich dir recht.... werds denke ich dann so machen.

                    Meine Levenshtein Query funktioniert übrigens mitlerweile - hatte noch einen Fehler im Script.

                    Kommentar


                    • #11
                      Ähm, wo hattest du das her?

                      "DROP FUNCTION IF EXISTS levenshtein"

                      Ergibt bei mir:
                      Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS levenshtein' at line 1

                      Finde leider im Zusammenhang mit UDFs nichts im Manual

                      Kommentar


                      • #12
                        Da: http://dev.mysql.com/doc/mysql/en/drop-procedure.html (Für diesen Zusatz IF EXISTS habe ich keine versionseinschränkung gesehen)

                        Wenn's nicht geht, musst du wohl doch mysql.func auslesen
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Dank euch - entweder werd ich die mysql-Tabelle auslesen oder ich lass den Fehler einfach ins leere laufen.

                          Das das Script hier aber das einzige ist, was die Funktion benutzt sollte es kein Problem sein.

                          Es lädt sie, benutzt sie und dropped sie wieder. Wenn das jedes Script macht kommt ja im Normalfall kein Fehler.

                          Das einzige was mit eben Sorgen macht, wenn das Script mehrmals nebeneinander läuft.
                          Vielleicht mach ich mir gleich noch die Mühe und leß die mysql-Tabelle aus.

                          Auf jeden Fall ein dickes

                          Kommentar


                          • #14
                            Warum spielst du sie nicht einmal ein und verwendest sie dann ienfach?
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Weil bei nem restart von nem Server die Funktion dann weg wäre.
                              Ok, man könnte noch das Start-Script anpassen. Aber die Scripte sollen sich lieber selbst darum kümmern. Das ist mir lieber.

                              Kommentar

                              Lädt...
                              X