Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 18:10 29.09.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема MySQL :: Stored Functionsнови  
Автор Dakota (erotoman)
Публикувано14.04.05 12:36



Покрай

на OLD FIEND, ми хрумна да си поиграя малко със съхранените функции в MySQL, но се натъкнах на нещо малко неочаквано. Не съм сигурен дали грешката е в мен или в MySQL, защото съм писал съхранени функции само на PostgreSQL досега, но ето какво става:



mysql> create table test (id int unsigned auto_increment primary key, name varchar(10));
Query OK, 0 rows affected (0.10 sec)

mysql> insert into test (name) values ('A'), ('B'), ('C');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from test;
+----+------+
| id | name |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+------+
3 rows in set (0.00 sec)

mysql> set @x := 1;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create function inc () returns int
-> begin
-> set @x := @x + 1;
-> return @x;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> select inc();
+-------+
| inc() |
+-------+
| 2 |
+-------+
1 row in set (0.01 sec)

mysql> select inc();
+-------+
| inc() |
+-------+
| 3 |
+-------+
1 row in set (0.01 sec)

mysql> select inc();
+-------+
| inc() |
+-------+
| 4 |
+-------+
1 row in set (0.00 sec)

mysql> select inc();
+-------+
| inc() |
+-------+
| 5 |
+-------+
1 row in set (0.00 sec)

mysql> select inc();
+-------+
| inc() |
+-------+
| 6 |
+-------+
1 row in set (0.00 sec)

mysql> select id, name, inc() from test;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> select id, name, inc() from test;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
ERROR:
Can't connect to the server


Everything louder than everything else...

Редактирано от Dakota на 14.04.05 12:38.



Тема Re: Е защо не го пусна в bugs.mysql.com ?нови [re: Dakota]  
Автор salle (един такъв)
Публикувано14.04.05 15:41



Сървърът очевидно гърми и това трябва да се поправи.

Най смахнатото е, че не ще да гръмне под gdb :(

Много мразя такива бъгове дето не дават да ги дебъгваш



Тема Re: Е защо не го пусна в bugs.mysql.com ?нови [re: salle]  
Автор Dakota (erotoman)
Публикувано14.04.05 15:53



Ще го пусна, но исках да съм сигурен, че не е bogus.

Everything louder than everything else...


Тема Re: Недей! вече го направихнови [re: Dakota]  
Автор salle (един такъв)
Публикувано14.04.05 16:24







Тема Re: Недей! вече го направихнови [re: Dakota]  
Автор salle (един такъв)
Публикувано14.04.05 16:24







Тема Re: Между другото благодаря!нови [re: Dakota]  
Автор salle (един такъв)
Публикувано14.04.05 16:40



Мерси, че каза за този бъг. Колегите вече умуват какво да го правят.

Въпросната случка е комбинация от "user defined variable" и извикване на такава във функция при това за всеки ред от таблица.

Друг път като ти гръмне mysqld не се чуди дали проблема е в теб :)

Между другото ще те помоля да добавиш коментар на http://bugs.mysql.com/9902 и д акажеш с каква ОС гърми при теб защото нещо колегите не успяват да го повторят



Тема Re: Между другото благодаря!нови [re: salle]  
Автор Dakota (erotoman)
Публикувано14.04.05 17:14



Добре, че refresh-нах клубчетата преди да събмитна в бъгс, че щеше да стане кофти дублиране...

Добавих и коментар, с Windows NT и MySQL 5.0.3 съм, свалено и инсталирано вчера от огледалото на Online.

Everything louder than everything else...


Тема кеширане на функциите [re: Dakota]  
Автор Dakota (erotoman)
Публикувано14.04.05 22:08



Във връзка с разкритията по бъга се сетих да питам MySQL планира ли да осъществи някакво кеширане на функциите? Това не знам изобщо дали е стандартно, но в PostgreSQL има три опции (IMMUTABLE, STABLE и VOLATILE), които указват по какъв начин извикването на функцията да се оптимизира.



Та, в конкретния случай inc() трябва да се дефинира като некешируема, т.е. VOLATILE.

Надявам се да не се приеме като заяждане, но наистина има отношение към решаването на бъга.

А и не съм съвсем наясно с вътрешната имплементация на кеширането в MySQL и съответно - връзката с функциите.

Everything louder than everything else...

Редактирано от Dakota на 14.04.05 22:10.



Тема Re: кеширане на функциитенови [re: Dakota]  
Автор salle (един такъв)
Публикувано15.04.05 02:43



Надявам се да не се приеме като заяждане, но MySQL стриктно следва стандарта по отношение на съхранените Процедури и[ Функции като се започне от това, че поддържа и двата вида (И Процедури и Функции)

Никъде в стандарта поне до SQL 92 не се споменават ключови думи IMMUTABLE, STABLE и VOLATILE така, че не виждам защо да трябва да се дефинира функцията по нестандартен начин.

Честно казано ми е омръзнало да чета как понеже в PostgreSQL или в Oracle или в MSSQL това се прави така значи е правилно

Ами аз няма да твърдя, че в MySQL нещата са правилни, но пък ще си позволя удоволствието да се наслаждавам тихичко на опитите на много хора да си завъртят аргументите на 180 градуса от "MySQL грубо нарушава стандарта" на "Е да де то това MySQL го прави по стандарта ама той стандарта е глупав ..."

Колкото до "вътрешната имплементация на кеширането" - кеширането на кое?
Защото те кешовете в MySQL не са един и два. И нито един от тях не е стандартен между другото.



Тема Re: кеширане на функциитенови [re: salle]  
Автор phpGuruАдминистратор (член)
Публикувано15.04.05 10:48



според мен mysql си смени политиката към по-стрикно спазване на стандарта, а не хората мнението :-)

а какво наричаш нестандартен кеш (в спецификациите пише ли, кое може да се кешира и не) не е ли важното резултата да е ОК, а не как е постигнат (т.е. с кеш или без кеш)?




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.