Phoca Cart - chyba při aktualizaci na verzi 3.5.5

polato
11. úno 2021 20:15 - 11. úno 2021 20:23 #143703
Zdravím,
aktualizace komponenty Phoca Cart z verze 3.5.2 na 3.5.5 končí chybou, můžu poprosit o radu?
Díky moc.

Varování
JInstaller: :Instalace: Chyba SQL Duplicate column name 'queue_number'
Rozšíření Aktualizace: SQL chyba zpracování dotazu: DB funkce selhala, číslo chyby 1060
Duplicate column name 'queue_number'
SQL =
ALTER TABLE `#__phocacart_orders` ADD COLUMN `queue_number` varchar(64) NOT NULL DEFAULT '';
Balíček Aktualizace: Došlo k chybě při instalaci rozšíření: com_phocacart_v3.5.5.zip

Přílohy:

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od H13
11. úno 2021 20:59 #143705
Ahoj,

tohle je bohužel chyba, která se nedá ošetřit díky chybějícím instrukcím v MySQL (MariaDB to umí)

Při upgradu došlo k tomu, že to chtělo vložit sloupec do databáze, který tam už byl. Z jakého důvodu tam už byl, těžko říct.

Tady pomůže jen postupné mazání instrukcí pro upgrade a zkoušení upgradu:

- tedy otevřít instalační ZIP balíček a vymazat tuto instrukci z update SQL dotazu
instalační balíček ZIP (pouze komponenty): admin/update/update/sql/mysql/3.5.3.sql
ALTER TABLE `#__phocacart_orders` ADD COLUMN `queue_number` varchar(64) NOT NULL DEFAULT '';

Ale zda smazat jen instrukci pro tento sloupec nebo pro ostatní, těžko říc - zkusil bych podle toho souboru zjistit, zda ty tabulky už v databázi jsou nebo ne, pokud ano, pak všechny smazat

Po smazání balíček znovu zabalit a zkusit nainstalovat. A pokud tam bude další sloupec, co už v databázi je, tak opět to stejné pro daný sloupec :-( :-(


více zde:
www.phoca.cz/blog/1100-solution-to-a-pro...-updating-components

Bohužel, tak funguje instalační program Joomly a MySQL, které nemá tuto základní instrukci :-(

Phoca Gallery - http://www.phoca.cz/phocagallery - obrázková galerie (Joomla!)
Phoca Guestbook - http://www.phoca.cz/phocaguestbook - kniha návštěv (Joomla!)
Phoca Download - http://www.phoca.cz/phocadownload - stahování souborů (Joomla!)
Phoca Cart - http://www.phoca.cz/phocacart - e-shop,...
Poděkovali: polato

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Rudolf
11. úno 2021 21:26 #143706

Bohužel, tak funguje instalační program Joomly a MySQL, které nemá tuto základní instrukci


Proto mi vždy v easysoftware programátoři kladli na srdce, že je třeba nevyužívat automatické funkce a udělat si vlastní script php do aplikace, který bude načítat přírůstkové DB po zjištění stavu jaká verze je nainstalovaná (na to pak existuje složka v instalaci s přírůstkovými DB).

Nebo jsem to popletl a mluvím o něčem úplně jiném :)

MiniJoomla! - www.minijoomla.org - eshop s rozšířením Joomla/VM
Email Manager - aplikace na správu šablon emailů pro VirtueMart
Easy Feeder - aplikace na generování XML/CSV feedů a napojení na ERP pro VM
PragueClassicconcert - portál pro prodej vstupenek na systému Joomla

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od polato
12. úno 2021 00:27 #143707
Díky za radu, provedl jsem tyto úpravy a instalace se podařila. :)

-- ALTER TABLE `#__phocacart_orders` ADD COLUMN `queue_number` varchar(64) NOT NULL DEFAULT '';
-- ALTER TABLE `#__phocacart_orders` ADD COLUMN `queue_number_id` int(11) NOT NULL DEFAULT '0';

-- ALTER TABLE `#__phocacart_product_stock` ADD COLUMN `sku` varchar(255) NOT NULL DEFAULT '';
-- ALTER TABLE `#__phocacart_product_stock` ADD COLUMN `ean` varchar(15) NOT NULL DEFAULT '';

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
12. úno 2021 02:04 #143708
OT: V rámci instalátoru to lze řešit pomocí FOF frameworku od Akeeby (je součástí Joomly). Aktualizace se tam nepíší do sql souborů ale do XML, s různými doplňujícími podmínkami...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Rudolf
12. úno 2021 08:43 #143709

V rámci instalátoru to lze řešit pomocí FOF frameworku od Akeeby (je součástí Joomly). Aktualizace se tam nepíší do sql souborů ale do XML, s různými doplňujícími podmínkami...


To ale asi neplatí u aplikací ,které se prvotně napsaly pro J25, kde asi fof akeeba nebyl, a nyní jsou jen upgradovány na j3, že ne?

MiniJoomla! - www.minijoomla.org - eshop s rozšířením Joomla/VM
Email Manager - aplikace na správu šablon emailů pro VirtueMart
Easy Feeder - aplikace na generování XML/CSV feedů a napojení na ERP pro VM
PragueClassicconcert - portál pro prodej vstupenek na systému Joomla

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
12. úno 2021 13:22 #143710
To neplatí u aplikací, které fof nepoužívají. fof je framework, který v Joomle je asi opravdu až od J3 (v J4 už nativně zas nebude), nicméně lze jej použít pro vývoj komponenty od začátku a přibalit jej do instalátoru (pak bude funkční i na J2.5). Má některé poměrně šikovné funkce, někde je pro mně trochu krkolomný, ale zrovna ten instalátor tam je zajímavý.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od H13
13. úno 2021 20:54 - 13. úno 2021 20:55 #143711

Proto mi vždy v easysoftware programátoři kladli na srdce, že je třeba nevyužívat automatické funkce a udělat si vlastní script php do aplikace, který bude načítat přírůstkové DB po zjištění stavu jaká verze je nainstalovaná (na to pak existuje složka v instalaci s přírůstkovými DB).


Původně měly všechny Phoca rozšíření vlastní metody, tedy se to tam kontrolovalo a k takovýmto chybám nedocházelo. Ale po enormním tlaku typu: "Proč rozšíření nepoužívá standardní Joomla instalační vlastnost?", atd. se to změnilo.

Ale tady bych nevinil ani tak Joomlu jako spíš jen a pouze MySQL. Kvůli této chybějící jednodoché instrukci "IF NOT EXIST" v MySQL se píší zbytečně přeplácané řešení a vůbec tomu tak nemusí být. No a kvůli tomu, že je v Joomle pouze jeden driver jak pro MySQL tak pro MariaDB, to pak "odnášejí" i uživatelé MariaDB. A zase nutno podotkonout, že s tím Joomla asi nic neudělá, protože psát driver zvlášť pro MariDB a MySQL asi nemá smysl, když jsou, co se týče chování, z 99% stejný.

Pokud se člověk podívá např. na stack overflow a témata jako je "mysql - add column if not exist", tak uvidí vysoký počet požadavků na řešení tohoto problému a zároveň různé krkolomné řešení za pomocí stávajících metod. Pro vývojáře MySQL snad neexistuje přímočařejší feedback pro to, jakou vlastnost by měly implementovat.

Phoca Gallery - http://www.phoca.cz/phocagallery - obrázková galerie (Joomla!)
Phoca Guestbook - http://www.phoca.cz/phocaguestbook - kniha návštěv (Joomla!)
Phoca Download - http://www.phoca.cz/phocadownload - stahování souborů (Joomla!)
Phoca Cart - http://www.phoca.cz/phocacart - e-shop,...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
13. úno 2021 21:56 #143712
No ono to IF NOT EXISTS není součástí SQL standardu, např. Firebird to také nemá. Ten ale umí EXECUTE BLOCK, taková "uložená procedura", bez toho aby se ukládala do databáze, tak lze jedním dotazem zjistit existenci sloupce a druhým případně upravit / vytvořit. MySQL toto bohužel také neumí.

Na druhou stranu, mělo by se jednat v podstatě o extrémní situaci, zřejmě když někdo nainstaluje nějakou beta verzi nebo nějak zasáhne do databáze, takže je asi v zásadě zbytečné to jakkoliv řešit :)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.