MYSQL MyTAP проблема - PullRequest
       4

MYSQL MyTAP проблема

2 голосов
/ 01 февраля 2012

Мой вопрос может быть глупым, но у меня есть 2-дневный опыт работы с MYSQL.Я пытаюсь использовать MyTAP для модульного тестирования и сталкиваюсь с проблемой.

Вот код SQL, выполняемый на консоли mysql:

drop procedure  IF EXISTS tap.tstTableCount;
delimiter //

CREATE PROCEDURE tap.tstTableCount (IN db CHAR(64), IN tbl CHAR(64))
  BEGIN
    DECLARE l_sql VARCHAR (4000);
    SET l_sql=CONCAT('SELECT COUNT(*)>0 FROM ',db,'.',tbl,';');

    SET @sql=l_sql;
    PREPARE s1 FROM @sql;
    EXECUTE s1;
    DEALLOCATE PREPARE s1;

  END //

delimiter ;

call tap.tstTableCount('storibo','relationCategory'); /* This call works fine and returns 1 (true)*/

SELECT tap.ok( 
    tap.tstTableCount('storibo','relationCategory'), 
    'relationCategory contains data' 
); /* this one returns :
ERROR 1305 (42000): FUNCTION tap.tstTableCount does not exist */

это проблема с MyTAP fmk или doЯ ошибаюсь в синтаксисе?

1 Ответ

1 голос
/ 29 марта 2012

Проблема в том, что tap.tstTableCount является PROCEDURE, а не FUNCTION.Все тесты MyTAP являются ФУНКЦИЯМИ, как отмечается возможностью вызывать его в операторе SELECT.Вы не можете вызвать PROCEDURE из оператора SELECT, вместо этого нужно вызвать его через:

CALL tap.tstTableCount();

К сожалению, ваш пример - это пример, который нельзя просто преобразовать в FUNCTION для использованияфункции mytap.Динамический SQL недопустим в FUNCTION, но разрешен в PROCEDURE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...