hurtom / toloka

Створення нової Толоки
https://gitter.im/hurtom/toloka
MIT License
55 stars 20 forks source link

Типове значення user_birthday не дає змінити пароль #56

Open chief-j opened 7 years ago

chief-j commented 7 years ago

Стандартно записано 0000-00-00, але рушій не сприймає таку дату. Необхідні зміни зробив #55

yukoff commented 7 years ago

@chief-j Я поправив допис, але не полінуйтесь все ж почитати доку по форматуванню markdown - ліворуч унизу під вікном коментаря посилання (Styling with Markdown is supported), бо посилання було в нікуди...

chief-j commented 7 years ago

@yukoff Напевно, моє посилання тільки у мене працювало. Не біда, Майстер і так все розумів

yukoff commented 7 years ago

@chief-j Та яка біда - просто зайву ж роботу робите 😉 Для порівняння:

Було (саме так, не знаю, як воно працювало)

[https://github.com/hurtom/toloka/pull/55](url)

Стало:

#55
yukoff commented 7 years ago

Взагалі ще принаймні user_sig - в БД повно дивних DEFAULT '' NOT NULL чи DEFAULT 0 NOT NULL

yukoff commented 7 years ago

@konfuciusu Якщо дата народження не обов'язкова - можна давати ходу (я додам до #74), заодне можна всі поля продивитись на bb_users (як-от user_sig)

chief-j commented 7 years ago

@yukoff Саме через це, неможливо змінити пароль, тож це виправити треба

yukoff commented 7 years ago

Ще сюди ж - при спробі увійти як admin зловив отаке

Whoops\Exception\ErrorException thrown with message "A non well formed numeric value encountered"

Stacktrace:
#1 Whoops\Exception\ErrorException in /var/www/html/index.php:387
#0 Whoops\Run:handleError in /var/www/html/index.php:387
yukoff commented 7 years ago

Я зараз роблю тести міграції зі старого рушія з мінімально заповненими даними bb_users, на кшталт

INSERT INTO `bb_users`
    (`user_id`, `user_active`, `username`, `user_password2`, `user_timer`)
VALUES ...

-- міграція валиться з попередженням Warning: 1265 Data truncated for column '%s' at row 1 принаймні для цих

yukoff commented 7 years ago

Самим тільки виправленням типового значення не обійтись, додатково створив torrentpier/torrentpier#449

yukoff commented 7 years ago

@chief-j, Якщо не складно, постав для цього PR також прапорець Allow edits from maintainers

yukoff commented 7 years ago

Загалом, я пропоную щонайменше оці зробити DEFAULT NULL:

На InnoDB в плані розміру це ефективніше за зберігання пустої строки, щоправда доведеться зробити один великий UPDATE на таблиці - але натомість, це позбавить необхідності робити окремий для кожного стовпця, для порівняння:

UPDATE bb_users
SET user_birthday = IF(STRCMP(user_birthday, '0000-00-00'), user_birthday,  NULL),
    user_email = IF(STRCMP(user_email, ''), user_email, NULL),
    user_skype = IF(STRCMP(user_skype, ''), user_skype, NULL),
   ...
    user_interests = IF(STRCMP(user_interests, ''), user_interests, NULL)
WHERE user_birthday = '0000-00-00'
  OR user_email = ''
  OR user_skype = ''
  ...
  OR user_interests = '';

Нотатка: тут, вірогідно, навіть UPDATE без WHERE буде швидший

проти: (пам'ятаймо про ~900 тис. рядків)

UPDATE bb_users SET user_birthday = NULL WHERE user_birthday = '0000-00-00';
UPDATE bb_users SET user_email = NULL WHERE user_email = '';
UPDATE bb_users SET user_skype = NULL WHERE user_skype = '';
...

Ще кандидати:

Можна ще було б *_ip теж, але не певен, чи не використовуються вони спільно з анонсером.

@konfuciusu, чи є якісь ідеї чи заперечення?

konfuciusu commented 7 years ago

@yukoff я не проти і великих апдейтів не боюся.