Свои функции в мускуле

Дед Анвирыч

Новичок
Свои функции в мускуле

Уважаемые, нет ли какого-нибудь примерчика по сабжу. А то в ems mysqlmanager вроде что-то можно создавать, а в mysql мануале написано что еще вручную надо на cpp чето писать...
 

Demiurg

Guest
Да, к сожалению программистам иногда приходится писать программы.
 

AnToXa

prodigy-одаренный ребенок
ага, тут не так что ли ? :)

все то же самое, написал - пользуйся.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: AnToXa
ага, тут не так что ли ? :)

все то же самое, написал - пользуйся.
Дело в том, что писать на встроенном процедурном языке всё же попроще, чем на Ц. ;)
 

Screjet

Новичок
в сорцах мускула есть файл sql/udf_example.cc - это пример UDF, а здесь: http://www.mysql.com/doc/en/Adding_UDF.html можно узнать, как добавить UDF.

Удачи :)
 

cap

Guest
Может на PostgreSQL пересесть проще, если очень хосется функцию написать? ;)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Screjet
на PostgreSQL UDF можно описывать как типа ПХП-скрипт?
нет, pl/php там (пока?) нету, зато есть pl/perl, pl/tcl, pl/python. :D
но основное --- это всё же pl/pgsql:
Код:
CREATE FUNCTION rubric_delete_leaf (text)
RETURNS boolean
AS '
DECLARE
    id      ALIAS FOR $1;
    rubric  RECORD;
BEGIN
    SELECT rubric_left AS lft, rubric_right AS rght INTO rubric FROM rubrics WHERE rubric_id = id;
    IF NOT FOUND THEN
        RAISE EXCEPTION ''cannot find rubric (ID %)'', id;
    END IF;
    IF rubric.rght - rubric.lft > 1 THEN
        RAISE EXCEPTION ''rubric (ID %) has child rubrics, cannot delete'', id;
    END IF;
    DELETE FROM rubrics WHERE rubric_id = id;
    UPDATE rubrics SET rubric_left  = rubric_left  - 2 WHERE rubric_left  >  rubric.rght;
    UPDATE rubrics SET rubric_right = rubric_right - 2 WHERE rubric_right >= rubric.rght;
    RETURN ''t'';
END;
' LANGUAGE 'plpgsql';
edit: местный тэг [ sql ] пытается не только подкрасить, но и переформатировать. плёхо...
 

Screjet

Новичок
Чтож, хранимая процедура на Perl это отлично, а есси будет на ПХП, то вообще супер :)

Это, конечно, явный плюс PostgreSQL.
 

cap

Guest
об том и разговор, что если хочешь БД со связями, процедурами, триггерами и т.д., то топай на PostgreSQL...

Она у хостеров встречается.
Реже конечно чем MySQL, но встречается.
 

Дед Анвирыч

Новичок
Автор оригинала: cap
об том и разговор, что если хочешь БД со связями, процедурами, триггерами и т.д., то топай на PostgreSQL...

Она у хостеров встречается.
Реже конечно чем MySQL, но встречается.
:-/
 

cap

Guest
Ну SQL-то похож.
придется переделывать php скрипты, но и там в основном нужно будет поменять mysql_ на pg_... Глобальной заменой во всех файлах.
так что справиться можно и довольно быстро...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Дед Анвирыч
Типа переделыать все придется тогда
Ну, если ты не использовал abstraction layer и везде писал mysql_*(), то сам себе злой баклан. но даже это RegEx'ами лечится быстро.

для переделки схемы базы есть всякие полезные скриптики и есть статьи о том как переделать запросы:

http://www.xach.com/aolserver/mysql-to-postgresql.html
http://techdocs.postgresql.org/techdocs/mysql2postgresql.php

кроме того, чем дольше будешь думать, надо ли переходить, тем больше переделывать в конце придётся. ;)
 
Сверху