SyntaxError - invalid syntax



<https://ctrlv.cz/B7rx> zdravím, už nevím jhak udělat aby mi to skočilo pod return porad mi do skace az pod def, uz jsem to prepisoval tak 10x//Upraven titulek (mail).//
To poslední "or" tam je na co?<https://ctrlv.cz/shots/2019/10/01/3VLq.png>
<p>kdybych byl tebou, nezměnil bych název třídy, ale raději přidám svou vlastní třídu do elementu formuláře. můžete to provést implementací <a href="http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook\_form\_alter/7">hook\_form\_alter</a> do vlastního modulu nebo (v případě drupal 7) do vašeho motivu. kód by vypadal asi takto:</p><pre><code>&lt;?php function mymodule\_form\_alter(&amp;$form, &amp;$form\_state, $form\_id) { if ($form\_id = 'my\_form') { $form['actions']['submit']['#attributes']['class'][] = 'form-submitone'; } } ?&gt; </code></pre><p>mimochodem, tlačítko tlačítka odeslat nemusí být nutně <code>$form['actions']['submit']</code>. budete muset zjistit, který prvek je tlačítko odeslání ve vaší konkrétní situaci. můžete to provést výstupem proměnné $ form; doporučuji nainstalovat modul <a href="http://drupal.org/project/devel">devel</a> a přidat funkci <code>dsm($form);</code> k výše uvedené funkci.</p> <p>příkaz <code>merge</code> má složitou syntaxi a ještě složitější implementaci, ale v zásadě jde o spojení dvou tabulek, filtrování dolů na řádky, které je třeba změnit (vložit, aktualizovat nebo smazat), a poté provést požadované změny. vzhledem k těmto vzorovým údajům:</p><pre><code>declare @categoryitem as table ( categoryid integer not null, itemid integer not null, primary key (categoryid, itemid), unique (itemid, categoryid) ); declare @datasource as table ( categoryid integer not null, itemid integer not null primary key (categoryid, itemid) ); insert @categoryitem (categoryid, itemid) values (1, 1), (1, 2), (1, 3), (2, 1), (2, 3), (3, 5), (3, 6), (4, 5); insert @datasource (categoryid, itemid) values (2, 2); </code></pre><p><strong> cíl </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 2 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 3 ║ ║ 3 ║ 5 ║ ║ 4 ║ 5 ║ ║ 3 ║ 6 ║ ╚════════════╩════════╝ </code></pre><p><strong> zdroj </strong></p><pre><code>╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>požadovaným výsledkem je nahrazení dat v cíli daty ze zdroje, ale pouze pro <code>categoryid = 2</code>. po výše uvedeném popisu <code>merge</code> bychom měli napsat dotaz, který spojuje zdroj a cíl pouze na klíče, a filtrovat řádky pouze v klauzulích <code>when</code>:</p><pre><code>merge into @categoryitem as target using @datasource as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by source and target.categoryid = 2 then delete when not matched by target and source.categoryid = 2 then insert (categoryid, itemid) values (categoryid, itemid) output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>to dává následující výsledky:</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 1 ║ 1 ║ ║ 1 ║ 2 ║ ║ 1 ║ 3 ║ ║ 2 ║ 2 ║ ║ 3 ║ 5 ║ ║ 3 ║ 6 ║ ║ 4 ║ 5 ║ ╚════════════╩════════╝ </code></pre><p>realizační plán je: <img src="https://i.stack.imgur.com/fovhu.jpg" alt="merge plan"></p><p>všimněte si, že jsou obě tabulky plně naskenovány. můžeme to považovat za neefektivní, protože pouze řádky, kde <code>categoryid = 2</code> bude ovlivněno v cílové tabulce. zde přicházejí varování v books online. jeden chybný pokus o optimalizaci, aby se dotkl pouze nezbytných řádků v cíli, je:</p><pre><code>merge into @categoryitem as target using ( select categoryid, itemid from @datasource as ds where categoryid = 2 ) as source on source.itemid = target.itemid and target.categoryid = 2 when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>logika v klauzuli <code>on</code> je použita jako součást spojení. v tomto případě je spojení úplným vnějším spojením (viz <a href="http://technet.microsoft.com/en-us/library/bb522522%28v=sql.105%29.aspx">tento záznam books online</a> proč). použití kontroly kategorie 2 na cílových řádcích jako součásti vnějšího spojení nakonec povede k odstranění řádků s jinou hodnotou (protože neodpovídají zdroji):</p><pre><code>╔═════════╦════════════╦════════╗ ║ $action ║ categoryid ║ itemid ║ ╠═════════╬════════════╬════════╣ ║ delete ║ 1 ║ 1 ║ ║ delete ║ 1 ║ 2 ║ ║ delete ║ 1 ║ 3 ║ ║ delete ║ 2 ║ 1 ║ ║ insert ║ 2 ║ 2 ║ ║ delete ║ 2 ║ 3 ║ ║ delete ║ 3 ║ 5 ║ ║ delete ║ 3 ║ 6 ║ ║ delete ║ 4 ║ 5 ║ ╚═════════╩════════════╩════════╝ ╔════════════╦════════╗ ║ categoryid ║ itemid ║ ╠════════════╬════════╣ ║ 2 ║ 2 ║ ╚════════════╩════════╝ </code></pre><p>kořenová příčina je ze stejného důvodu, proč se predikáty chovají v klauzuli vnější spojení <code>on</code> odlišně, než když jsou specifikovány v klauzuli <code>where</code>. syntaxe <code>merge</code> (a implementace spojení v závislosti na zadaných klauzulích) jen ztěžují vidět, že tomu tak je.</p><p> <a href="http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx">navádění v books online</a> (rozšířeno v položce <a href="http://technet.microsoft.com/en-us/library/cc879317%28v=sql.105%29.aspx">optimizing performance</a> ) nabízí navádění, které zajistí, že správná sémantika je vyjádřena pomocí syntaxe <code>merge</code>, aniž by uživatel nutně musel muset pochopit všechny podrobnosti implementace nebo zohlednit způsoby, kterými by optimalizátor mohl legitimně přeskupit věci z důvodů efektivnosti provádění.</p><p>dokumentace nabízí tři možné způsoby implementace časného filtrování:</p><p><strong> zadání podmínky filtrování v klauzuli <code>when</code> </strong> zaručuje správné výsledky, ale může znamenat, že více řádků je čteno a zpracováno ze zdroje a cíle tabulky, než je nezbytně nutné (viz první příklad).</p><p><strong> aktualizace prostřednictvím zobrazení </strong>, která obsahuje podmínku filtrování, také zaručuje správné výsledky (protože změněné řádky musí být přístupné pro aktualizaci prostřednictvím zobrazení), ale vyžaduje to vyhrazené zobrazení, které splňuje liché podmínky pro aktualizaci zobrazení.</p><p><strong> použití společného výrazu tabulky </strong> přináší podobné riziko při přidávání predikátů k klauzuli <code>on</code>, ale z poněkud odlišných důvodů. v mnoha případech to bude bezpečné, ale vyžaduje to odbornou analýzu prováděcího plánu, aby se to potvrdilo (a rozsáhlé praktické testování). například:</p><pre><code>with target as ( select * from @categoryitem where categoryid = 2 ) merge into target using ( select categoryid, itemid from @datasource where categoryid = 2 ) as source on source.itemid = target.itemid and source.categoryid = target.categoryid when not matched by target then insert (categoryid, itemid) values (categoryid, itemid) when not matched by source then delete output $action, isnull(inserted.categoryid, deleted.categoryid) as categoryid, isnull(inserted.itemid, deleted.itemid) as itemid ; </code></pre><p>výsledkem jsou správné výsledky (neopakované) s optimálnějším plánem:</p><p><img src="https://i.stack.imgur.com/tazmk.jpg" alt="merge plan 2"></p><p>plán čte pouze řádky pro kategorii 2 z cílové tabulky. to může být důležitým hlediskem výkonu, pokud je cílová tabulka velká, ale je příliš snadné tuto chybu získat pomocí syntaxe <code>merge</code>.</p><p>někdy je snazší zapsat <code>merge</code> jako samostatné operace dml. tento přístup může dokonce <strong> vést lépe </strong> než jediný <code>merge</code>, což je skutečnost, která lidi často překvapuje.</p><pre><code>delete ci from @categoryitem as ci where ci.categoryid = 2 and not exists ( select 1 from @datasource as ds where ds.itemid = ci.itemid and ds.categoryid = ci.categoryid ); insert @categoryitem select ds.categoryid, ds.itemid from @datasource as ds where ds.categoryid = 2; </code></pre> <p>stačí implementovat <a href="http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook\_theme\_registry\_alter/6">hook\_theme\_registry\_alter ()</a> , aby se změnila funkce motivu, která se vyvolá při vyvolání <code>theme('form\_element')</code>; normálně je vyvolána funkce motivu <a href="http://api.drupal.org/api/drupal/includes--form.inc/function/theme\_form\_element/6">theme\_form\_element ()</a> .</p><pre><code>function theme\_form\_element($element, $value) { // this is also used in the installer, pre-database setup. $t = get\_t(); $output = '&lt;div class="form-item"'; if (!empty($element['#id'])) { $output .= ' id="' . $element['#id'] . '-wrapper"'; } $output .= "&gt;\n"; $required = !empty($element['#required']) ? '&lt;span class="form-required" title="' . $t('this field is required.') . '"&gt;*&lt;/span&gt;' : ''; if (!empty($element['#title'])) { $title = $element['#title']; if (!empty($element['#id'])) { $output .= ' &lt;label for="' . $element['#id'] . '"&gt;' . $t('!title: !required', array('!title' =&gt; filter\_xss\_admin($title), '!required' =&gt; $required)) . "&lt;/label&gt;\n"; } else { $output .= ' &lt;label&gt;' . $t('!title: !required', array('!title' =&gt; filter\_xss\_admin($title), '!required' =&gt; $required)) . "&lt;/label&gt;\n"; } } $output .= " $value\n"; if (!empty($element['#description'])) { $output .= ' &lt;div class="description"&gt;' . $element['#description'] . "&lt;/div&gt;\n"; } $output .= "&lt;/div&gt;\n"; return $output; } </code></pre><pre><code>function mymodule\_theme\_registry\_alter(&amp;$theme\_registry) { if (isset($theme\_registry['form\_element']) { $theme\_registry['form\_element']['function'] = "theme\_mymodule\_form\_element"; } } </code></pre><p>pomocí kódu <code>theme\_form\_element()</code> můžete napsat vlastní motivovou funkci a odstranit html značky, které nechcete. nezapomeňte, že <code>theme('form\_element')</code> je vyvolán pro každý výstup elementu formuláře pomocí api api; pokud chcete změnit výstup html pouze elementu formuláře, musíte zkontrolovat hodnotu #type.<br> <a href="http://api.drupal.org/api/drupal/includes--form.inc/function/theme\_textfield/6">theme\_textfield ()</a> je funkce motivu, která motivuje textové pole, ale nevytváří popisek, ani obtékání <code>&lt;div&gt;</code>, které je již na výstupu <code>theme\_form\_element()</code>.</p><p>alternativně to lze provést v tématu, které přepíše <code>theme\_form\_element()</code>.<br> který přístup byste měli použít, záleží na tom, zda potřebujete změnit výstup v určitém tématu, nebo u všech motivů povolených na vašem webu drupal; v druhém případě vy potřeba implementovat háčky, které jsem nahlásil v modulu.</p> <p>ne, tady opravdu nejsou žádné zkratky. prozkoumejte věci v následujícím pořadí:</p><ol> <li>zkontrolujte název postupu.</li> <li>zkontrolujte počet parametrů.</li> <li>zkontrolujte typy parametrů.</li> <li>zkontrolujte názvy parametrů.</li> </ol> Ignoruje všechny používá související non-SQL z LINQ a právě s ohledem na LINQ-to-SQL.


LINQ dotazy jsou objekty, které si zachovávají dotazu *definici* a ekvivalentní SQL je instanci pouze v okamžiku dotazu je vlastně opakována. Který umožňuje komponenty musí být řádně odděleny a umožňují **zpracování ve stylu potrubí** , kde jsou dotazy vrácené spodních vrstev (např. Podle údajů) a transformovány vyššími složkami v zásobníku. Dotaz může přizpůsobit nové filtry, se připojí a další ‚artefakty‘ z každé složky ve zpracovatelském potrubí, dokud nedosáhne konečného formulář, který je případně opakována. Tato manipulace je prakticky nemožné pomocí rovné textu SQL.


Další výhodou je, že LINQ jeho syntaxe je snazší pochopit vývojářům non-databáze. SQL syntax odbornost je překvapivě těžké najít aktivum. Několik vývojáři jsou ochotni trávit čas učení jemnější body SQL mimo `SELECT * FROM ... WHERE ...`. Syntaxe LINQ je blíže ke každodenním prostředí .NET a využívá stávající dovednost nastavit v této vrstvě (např. Výrazy lambda) v protikladu k vynucení vývojář naučit správné SQL pro cílené zadní konce (T-SQL, PL-SQL atd). Vzhledem k tomu, že výraz LINQ vyjadřuje požadovaný výsledek do značné míry přímo do relační algebře, poskytovatelé mají mnohem snazší práci do generuje odpovídající SQL (nebo dokonce vytvářet přímou plán provádění!). Srovnejte to s nemožný úkol ‚generické‘ databázové řidiči museli čelit vzácně s textem SQL. Pamatovat ODBC syntaxe escape, někdo? <p>v ssms musíte změnit některé možnosti:</p><p>nástroje - možnosti - výsledky dotazu - sql server - výsledky do mřížky (nebo textu) -&gt; <strong>při kopírování nebo ukládání výsledků uveďte záhlaví sloupců</strong>.</p><p>změněná nastavení se použijí na nová, ale ne existující okna dotazů.</p> Pěkný den, je třeba se obrátit na správce a o této skutečnosti ho informovat.   

  

Zároveň doporučuji zaslat přípis na soud s vysvětlením situace. Pokud byste potřebovali s přípisem pomoci, doporučuji obrátit se na bezplatnou poradnu, jejich seznam najdete na sako. justice.cz <p>nedávno jsem napsal <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4"><strong> podrobného průvodce, jak přepnout z mysql's <code>utf8</code> to <code>utf8mb4</code> </strong></a> . pokud tam budete postupovat, vše by mělo fungovat správně. zde jsou přímé odkazy na každý jednotlivý krok procesu:</p><ul> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#backup">krok 1: vytvoření zálohy</a> </li> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#upgrade">krok 2: upgradujte server mysql</a> </li> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#databases-tables-columns">krok 3: upravit databáze, tabulky a sloupce</a> </li> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#column-index-length">krok 4: zkontrolujte maximální délku sloupců a indexových klíčů</a> </li> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#character-sets">krok 5: upravit připojení, sady znaků a klienta</a> </li> <li> <a href="http://mathiasbynens.be/notes/mysql-utf8mb4#repair-optimize">krok 6: opravit a optimalizovat všechny tabulky</a> </li> </ul><p>mám podezření, že váš problém lze vyřešit následujícím krokem 5. doufám, že to pomůže!</p> <p>nejprve byste si měli být naprosto jistí, že musíte iterovat přes jednotlivé řádky - operace založené na sadě budou fungovat rychleji v každém případě, na který si pomyslím, a obvykle použiji jednodušší kód.</p><p>v závislosti na vašich datech může být možné opakovat smyčky pouze pomocí vybraných příkazů, jak je uvedeno níže:</p><pre><code>declare @id int while (select count(*) from atable where processed = 0) &gt; 0 begin select top 1 @id = id from atable where processed = 0 --do some processing here update atable set processed = 1 where id = @id end </code></pre><p>další alternativou je použití dočasné tabulky:</p><pre><code>select * into #temp from atable declare @id int while (select count(*) from #temp) &gt; 0 begin select top 1 @id = id from #temp --do some processing here delete #temp where id = @id end </code></pre><p>možnost, kterou byste si měli vybrat, opravdu závisí na struktuře a objemu vašich dat.</p><p><strong> poznámka: </strong> pokud používáte sql server, měli byste být lépe obsluhováni pomocí:</p><pre><code>while exists(select * from #temp) </code></pre><p>pomocí <code>count</code> se bude muset dotknout každého jednotlivého řádku v tabulce, <code>exists</code> se musí dotknout pouze prvního (viz <a href="https://stackoverflow.com/a/65294/963542">josefova odpověď</a> níže).</p> <p>pravděpodobně se dostáváte do radostí mysql myisam engine ...</p><p>v rámci mysql (nebo phpmyadmin) použijte příkazy repair table xyz znovu, opakovaně, na každé z vašich tabulek (nebo spíše tabulek souvisejících s vašimi podmínkami, protože to jsou ty, které znějí zkaženě), aby se zjistilo, zda to nic nevyřeší.</p><p>pokud selžou, existuje několik zdokumentovaných řešení:</p><p> <a href="http://www.google.com/search?q=recover+a+corrupt+mysql+database">http://www.google.com/search?q=recover+a+corrupt+mysql+database</a> </p><p>jakmile jsou věci obnoveny, spusťte příkazy optimalizovat tabulku xyz na každé tabulce a poté změňte motor databáze a každou tabulku, aby byla použita innodb. innodb poněkud neuspořádá katalog (zejména pokud upustíte databázi nebo velké tabulky), ale - pokud je kompatibilní s acid - je to o dost méně náchylné k chybám než myisam.</p>