Я разработал приложение для работы с MySQL 5, которое использует представления для доступа к основным фрагментам данных. Оказывается, наш производственный сервер использует MySQL 4, в который не включены представления.
Есть ли у кого-нибудь быстрый и грязный способ справиться с этим, не требующий переписывания всего моего кода?
Черт, я знал, что MySQL - это игрушка, но понятия не имел ...
@Paul: MySQL 5.0 был выпущен более трех лет назад с поддержкой представлений, триггеров и хранимых процедур. Старые версии любого программного обеспечения можно считать слабыми.






К сожалению, без обновления до MySQL 5, вероятно, нет.
Это, безусловно, указывает на важность использования одной и той же технологии в средах разработки и производства!
Обходные пути, связанные с триггерами или хранимыми процедурами, не будут работать, потому что они также не поддерживаются в MySQL 4.x.
Ваши варианты на данный момент:
Перепишите код приложения, чтобы дублировать данные в денормализованных таблицах, чтобы они соответствовали вашим представлениям.
Обновите производственную базу данных до MySQL 5.0. Если вы говорите о хостинг-провайдере, обратитесь к этому провайдеру и спросите, есть ли у него опция для MySQL 5.0, в противном случае вам нужно переехать к провайдеру, у которого есть такая возможность.
Я бы порекомендовал второй путь, это будет намного меньше работы, чем написание кода для управления повторяющимися данными.
Обратите внимание, что MySQL 4.1 был выпущен в качестве производственного программного обеспечения более четырех лет назад. Активная поддержка этого выпуска закончилась в 2006 году. Расширенная поддержка MySQL 4.1 заканчивается 31 декабря 2009 года. См. http://www.mysql.com/about/legal/lifecycle/
Спасибо. Это, к сожалению, мой работодатель. У них разные среды на рабочих серверах и серверах разработки, и они даже не удосуживаются сообщить об этом одному из своих программистов. Обновление не вариант. Интересно, что бы об этом сказал тест Джоэла ??
Если вам не солгал о производственном сервере, я бы сказал, что вы на 50% виноваты в том, что не спросили, что работает на производственном сервере, прежде чем потратить много времени на использование специфичных для версии функций.
@Bill - Ложь - сильное слово. Старший разработчик на самом деле не проверял, когда я спросил о версии на реальном сервере - он просто заверил меня, что если она работает в среде разработки, все будет хорошо.
Ой. Кроме DeLorean и конденсатора потока или обновления сервера, я не знаю простого способа обойти эту проблему. Кажется, необходимы большие изменения.
На ум приходит быстрый и очень грязный способ - создать подкласс DBI и переписать там SQL. Конечно, зависит от того, для чего вы используете представления, и если вы имеете в виду MySQL 4.0 (не имеет подзапросов) или MySQL 4.1 (есть подзапросы).
Если у вас версия 4.1, вы можете включить:
CREATE VIEW foo AS
SELECT a, b, c FROM real_table WHERE fooable = 1;
SELECT * FROM foo;
в
SELECT v1.* FROM (
SELECT a, b, c FROM real_table WHERE fooable = 1
) v1;
По крайней мере, последний синтаксис работает в 5.0.x, я думаю, что он должен быть и в 4.1.x.
Если у вас 4.0 ... ну, это будет не так просто.
Вы также можете изменить имена столбцов, используя псевдонимы столбцов во внешнем запросе. В любом случае, как вы говорите, это сработает для 4.1, но я не уверен, что это особенно быстро. :-(
Да, это может быть не так быстро. Это определенно то, что нужно проверить.
Обновить рабочий сервер? :)