MySQL.
W kodzie zakładającym bazę mam między innymi:
CREATE TABLE elostart
(
wartość INT PRIMARY KEY
)//
INSERT INTO elostart (wartość) VALUES (1500)//
CREATE TABLE userzy
(
nick VARCHAR(30) PRIMARY KEY,
hasło VARCHAR(30),
elo INT
)//
CREATE FUNCTION rejestrujUsera (nickArg VARCHAR(30), hasłoArg VARCHAR(30))
RETURNS BOOLEAN NOT DETERMINISTIC
BEGIN
DECLARE istnieje INT;
DECLARE wynik BOOLEAN;
SELECT COUNT(nick) INTO istnieje FROM userzy WHERE nick = nickArg;
IF istnieje <> 0
THEN
SET wynik = FALSE;
ELSE
INSERT INTO userzy (nick, hasło, elo)
SELECT nickArg, hasłoArg, elostart.wartość FROM elostart;
SET wynik = TRUE;
END IF;
RETURN wynik;
END//
Testuję w phpmyadmin.
Jak pojedynczo wpisuję:
SELECT rejestrujUsera('user1', 'hasło1');
SELECT rejestrujUsera('user2', 'hasło2');
# … itd
To otrzymuję poprawne wyniki: 1
jeśli dany nick nie był jeszcze zarejestrowany (i w bazie pojawiają się wtedy dane nowego usera), '0' jeśli już był zarejestrowany.
A teraz próbuję, dla wygody, zarejestrować od razu 50 userów. Co prawda, w tabeli userzy
wpisy pojawiają się poprawne, ale funkcja zwraca błędne wyniki… Niepoprawnie funkcja mi zwraca 0
dla każdego usera oprócz pięćdziesiątego!
Te błędne wyniki pojawiają się po wpisaniu w phpmyadmin następującego zestawu komend na raz:
SELECT rejestrujUsera('user1', 'hasło1');
SELECT rejestrujUsera('user2', 'hasło2');
SELECT rejestrujUsera('user3', 'hasło3');
SELECT rejestrujUsera('user4', 'hasło4');
SELECT rejestrujUsera('user5', 'hasło5');
SELECT rejestrujUsera('user6', 'hasło6');
SELECT rejestrujUsera('user7', 'hasło7');
SELECT rejestrujUsera('user8', 'hasło8');
SELECT rejestrujUsera('user9', 'hasło9');
SELECT rejestrujUsera('user10', 'hasło10');
SELECT rejestrujUsera('user11', 'hasło11');
SELECT rejestrujUsera('user12', 'hasło12');
SELECT rejestrujUsera('user13', 'hasło13');
SELECT rejestrujUsera('user14', 'hasło14');
SELECT rejestrujUsera('user15', 'hasło15');
SELECT rejestrujUsera('user16', 'hasło16');
SELECT rejestrujUsera('user17', 'hasło17');
SELECT rejestrujUsera('user18', 'hasło18');
SELECT rejestrujUsera('user19', 'hasło19');
SELECT rejestrujUsera('user20', 'hasło20');
SELECT rejestrujUsera('user21', 'hasło21');
SELECT rejestrujUsera('user22', 'hasło22');
SELECT rejestrujUsera('user23', 'hasło23');
SELECT rejestrujUsera('user24', 'hasło24');
SELECT rejestrujUsera('user25', 'hasło25');
SELECT rejestrujUsera('user26', 'hasło26');
SELECT rejestrujUsera('user27', 'hasło27');
SELECT rejestrujUsera('user28', 'hasło28');
SELECT rejestrujUsera('user29', 'hasło29');
SELECT rejestrujUsera('user30', 'hasło30');
SELECT rejestrujUsera('user31', 'hasło31');
SELECT rejestrujUsera('user32', 'hasło32');
SELECT rejestrujUsera('user33', 'hasło33');
SELECT rejestrujUsera('user34', 'hasło34');
SELECT rejestrujUsera('user35', 'hasło35');
SELECT rejestrujUsera('user36', 'hasło36');
SELECT rejestrujUsera('user37', 'hasło37');
SELECT rejestrujUsera('user38', 'hasło38');
SELECT rejestrujUsera('user39', 'hasło39');
SELECT rejestrujUsera('user40', 'hasło40');
SELECT rejestrujUsera('user41', 'hasło41');
SELECT rejestrujUsera('user42', 'hasło42');
SELECT rejestrujUsera('user43', 'hasło43');
SELECT rejestrujUsera('user44', 'hasło44');
SELECT rejestrujUsera('user45', 'hasło45');
SELECT rejestrujUsera('user46', 'hasło46');
SELECT rejestrujUsera('user47', 'hasło47');
SELECT rejestrujUsera('user48', 'hasło48');
SELECT rejestrujUsera('user49', 'hasło49');
SELECT rejestrujUsera('user50', 'hasło50');
Skąd takie rezultaty??