12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748 |
- <!DOCTYPE html>
- <html>
- <head data-suburl="">
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-
- <meta name="author" content="diogo" />
- <meta name="description" content="gnu-social - GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation." />
- <meta name="keywords" content="go, git, self-hosted, gogs">
-
- <meta name="referrer" content="no-referrer" />
- <meta name="_csrf" content="pZsngCZUGpJ2KgKnqXo_SF_30Ow6MTYwNDc5MjM3Mjc3MjYxNTY2Ng==" />
- <meta name="_suburl" content="" />
-
-
-
- <meta property="og:url" content="https://notabug.org/diogo/gnu-social" />
- <meta property="og:type" content="object" />
- <meta property="og:title" content="diogo/gnu-social">
- <meta property="og:description" content="GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation.">
- <meta property="og:image" content="https://notabug.org/avatars/12290" />
-
- <link rel="shortcut icon" href="/img/favicon.png" />
- <script src="/js/jquery-1.11.3.min.js"></script>
- <script src="/js/libs/jquery.are-you-sure.js"></script>
- <link href="/img/icon-48.ico" rel="icon" type="image/x-icon" />
- <link href="/img/icon-60.png" rel="apple-touch-icon">
- <link href="/img/icon-76.png" rel="apple-touch-icon" sizes="76x76">
- <link href="/img/icon-120.png" rel="apple-touch-icon" sizes="120x120">
- <link href="/img/icon-152.png" rel="apple-touch-icon" sizes="152x152">
- <link href="/img/icon-240.png" rel="apple-touch-icon" sizes="240x240">
- <link rel="stylesheet" href="/assets/font-awesome-4.6.3/css/font-awesome.min.css">
- <link rel="stylesheet" href="/assets/octicons-4.3.0/octicons.min.css">
-
-
-
-
- <link rel="stylesheet" href="/css/semantic-2.2.13.min.css">
- <link rel="stylesheet" href="/css/gogs.css?v=6fc9e85aa88133794d3434ea74aa557a">
- <link rel="stylesheet" href="/css/notabug.css">
-
- <script src="/js/semantic-2.2.13.min.js"></script>
- <script src="/js/gogs.js?v=6fc9e85aa88133794d3434ea74aa557a"></script>
- <title>Please avoid using MySQL 8.0 feature for many shared web hosting - NotABug.org: Free code hosting</title>
- <meta name="theme-color" content="#428bca">
-
- <noscript><style>.nojs-popup:hover > .menu { display: block ; }</style></noscript>
- </head>
- <body>
- <div class="full height">
- <noscript>Please enable JavaScript in your browser!</noscript>
-
- <div id="header-div" class="following bar light">
- <div class="ui container">
- <div class="ui grid">
- <div class="column">
- <div class="ui top secondary menu">
- <a class="item brand" href="/">
- <img class="ui mini image" src="/img/favicon.png">
- </a>
-
- <a class="item" href="/">Home</a>
-
- <a class="item" href="/explore/repos">Explore</a>
-
-
- <a class="notabug-item item" href="/help" rel="noreferrer">Help</a>
- <div class="right menu">
-
- <a class="item" href="/user/sign_up">
- <i class="octicon octicon-person"></i> Register
- </a>
-
- <a class="item" href="/user/login?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
- <i class="octicon octicon-sign-in"></i> Sign In
- </a>
- </div>
-
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="repository view issue pull">
- <div class="header-wrapper">
- <div class="ui container">
- <div class="ui vertically padded grid head">
- <div class="column">
- <div class="ui header">
- <div class="ui huge breadcrumb">
- <i class="mega-octicon octicon-repo"></i>
- <a href="/diogo">diogo</a>
- <div class="divider"> / </div>
- <a href="/diogo/gnu-social">gnu-social</a>
-
-
- </div>
-
- <div class="ui right">
- <div class="ui labeled button" tabindex="0">
- <a class="ui basic button" href="/diogo/gnu-social/action/watch?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
- <i class="icon fa-eye-slash"></i>Watch
- </a>
- <a class="ui basic label" href="/diogo/gnu-social/watchers">
- 9
- </a>
- </div>
- <div class="ui labeled button" tabindex="0">
- <a class="ui basic button" href="/diogo/gnu-social/action/star?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
- <i class="icon fa-star-o"></i>Star
- </a>
- <a class="ui basic label" href="/diogo/gnu-social/stars">
- 22
- </a>
- </div>
-
- <div class="ui labeled button" tabindex="0">
- <a class="ui basic button " href="/repo/fork/25974">
- <i class="octicon octicon-repo-forked"></i>Fork
- </a>
- <a class="ui basic label" href="/diogo/gnu-social/forks">
- 21
- </a>
- </div>
-
- </div>
-
- </div>
- </div>
- </div>
- </div>
- <div class="ui tabs container">
- <div class="ui tabular menu navbar">
-
- <a class=" item" href="/diogo/gnu-social">
- <i class="octicon octicon-file-text"></i> Files
- </a>
-
-
- <a class="active item" href="/diogo/gnu-social/issues">
- <i class="octicon octicon-issue-opened"></i> Issues <span class="ui blue small label">73</span>
- </a>
-
-
- <a class=" item" href="/diogo/gnu-social/pulls">
- <i class="octicon octicon-git-pull-request"></i> Pull Requests <span class="ui blue small label">3</span>
- </a>
-
-
- <a class=" item" href="/diogo/gnu-social/wiki">
- <i class="octicon octicon-book"></i> Wiki
- </a>
-
-
- </div>
- </div>
- <div class="ui tabs divider"></div>
- </div>
- <div class="ui container">
- <div class="navbar">
- <div class="ui compact small menu">
- <a class=" item" href="/diogo/gnu-social/labels">Labels</a>
- <a class=" item" href="/diogo/gnu-social/milestones">Milestones</a>
- </div>
- <div class="ui right">
-
- <a class="ui green button" href="/diogo/gnu-social/issues/new">New Issue</a>
-
- </div>
- </div>
- <div class="ui divider"></div>
-
- <div>
- <div class="ui grid">
-
-
- <div class="sixteen wide column title">
- <div class="ui grid">
- <h1 class="twelve wide column">
- <span class="index">#206</span> <span id="issue-title" class="has-emoji">Please avoid using MySQL 8.0 feature for many shared web hosting</span>
- <div id="edit-title-input" class="ui input" style="display: none">
- <input value="Please avoid using MySQL 8.0 feature for many shared web hosting">
- </div>
- </h1>
-
- </div>
-
- <div class="ui green large label"><i class="octicon octicon-issue-opened"></i> Open</div>
-
-
-
- <span class="time-desc">
-
- opened <span class="time-since" title="Sat, 05 Sep 2020 11:23:37 UTC">2 months ago</span> by <a href="/senooken">senooken</a>
-
- ·
- 11 comments
- </span>
-
- <div class="ui divider"></div>
- </div>
-
-
- <div class="twelve wide column comment-list">
- <ui class="ui comments">
- <div class="comment">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issue-65591"><span class="time-since" title="Sat, 05 Sep 2020 11:23:37 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p>I checked latest commit ( <code><a href="https://notabug.org/diogo/gnu-social/commit/4884a97223d61e516a645ab3ae4b6ac009c12b63" rel="nofollow">4884a97223</a></code>).</p>
- <p>After that I cannot access my timeline due to a DB error.</p>
- <p>This commit requires a MySQL 8.0 feature <a href="https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html" rel="nofollow">JSON_TABLE</a> (MySQL 8.0.4 or later) in <code>classes/Memcached_DataObject.php</code>.</p>
- <p>My <a href="https://social.senooken.jp/senooken" rel="nofollow">GNU social server</a> is hosted by a shared web hosting service (MySQL 5.7, PHP 7.3).</p>
- <p>So I will try fixing this by moving <code>case 'mysql':</code> below <code>case 'mariadb':</code>.</p>
- <p>But the next <code>WITH</code> and <code>VALUES</code> clauses also require MySQL 8.0 (<a href="https://mariadb.com/kb/en/table-value-constructors/" rel="nofollow">MariaDB 10.3.3 or later</a>).</p>
- <ul>
- <li>WITH: <a href="https://dev.mysql.com/doc/refman/8.0/en/with.html" rel="nofollow">https://dev.mysql.com/doc/refman/8.0/en/with.html</a></li>
- <li>VALUES: <a href="https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html" rel="nofollow">https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html</a></li>
- </ul>
- <p>I am not familiar with SQL.</p>
- <p>Could you rewrite this code without the <code>WITH</code> and <code>VALUES</code> clauses, <a href="/XRevan86" rel="nofollow">@XRevan86</a>?</p>
- <p>Many shared web hosting services use MySQL 5.6 or 5.7 (MariaDB 10.1 or 10.2) for <a href="https://wordpress.org/about/requirements/" rel="nofollow">WordPress requirements</a>.</p>
- <p>Would we avoid using a MySQL 8.0 feature?</p>
-
- </div>
- <div class="raw-content hide">I checked latest commit (https://notabug.org/diogo/gnu-social/commit/4884a97223d61e516a645ab3ae4b6ac009c12b63).
- After that I cannot access my timeline due to a DB error.
- This commit requires a MySQL 8.0 feature [JSON_TABLE](https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html) (MySQL 8.0.4 or later) in `classes/Memcached_DataObject.php`.
- My [GNU social server](https://social.senooken.jp/senooken) is hosted by a shared web hosting service (MySQL 5.7, PHP 7.3).
- So I will try fixing this by moving `case 'mysql':` below `case 'mariadb':`.
- But the next `WITH` and `VALUES` clauses also require MySQL 8.0 ([MariaDB 10.3.3 or later](https://mariadb.com/kb/en/table-value-constructors/)).
- - WITH: https://dev.mysql.com/doc/refman/8.0/en/with.html
- - VALUES: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html
- I am not familiar with SQL.
- Could you rewrite this code without the `WITH` and `VALUES` clauses, @XRevan86?
- Many shared web hosting services use MySQL 5.6 or 5.7 (MariaDB 10.1 or 10.2) for [WordPress requirements](https://wordpress.org/about/requirements/).
- Would we avoid using a MySQL 8.0 feature?</div>
- <div class="edit-content-zone hide" data-write="issue-65591-write" data-preview="issue-65591-preview" data-update-url="/diogo/gnu-social/issues/206/content" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
- <div class="comment" id="issuecomment-20938">
- <a class="avatar" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/XRevan86">XRevan86</a> commented <a href="#issuecomment-20938"><span class="time-since" title="Sat, 05 Sep 2020 14:34:32 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Collaborator
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>This commit requires a MySQL 8.0 feature JSON_TABLE</p>
- </blockquote>
- <p>Just for clarity, it is planned to be added in MariaDB 10.6. I'll change the version condition when that is a certainty.</p>
- <blockquote>
- <p>But next WITH and VALUES clauses also require MySQL 8.0</p>
- </blockquote>
- <p><code>WITH</code> is available since MariaDB 10.2, <code>VALUES</code> – since MariaDB 10.3.<br>
- In Oracle MySQL they are indeed only present starting with MySQL 8.0.</p>
- <blockquote>
- <p>So I will try fixing this by moving <code>case 'mysql':</code> to below <code>case 'mariadb':</code>.</p>
- </blockquote>
- <p>That will not work even with Oracle MySQL 8.0, their implementation of <code>VALUES</code> picks a different subset of the standard (requires the optional <code>ROW</code> keyword, while MariaDB and PostgreSQL don't accept it at all).</p>
- <blockquote>
- <p>for WordPress requirements</p>
- </blockquote>
- <p>Are you saying that shared hostings won't move a muscle until WordPress forces them to by moving the bar higher?<br>
- Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.</p>
- <blockquote>
- <p>Would we avoid using a MySQL 8.0 feature?</p>
- </blockquote>
- <p>I need <code>WITH</code> here at least to improve performance of the heavily used method <code>multiGet</code>.</p>
-
- </div>
- <div class="raw-content hide">> This commit requires a MySQL 8.0 feature JSON_TABLE
- Just for clarity, it is planned to be added in MariaDB 10.6. I'll change the version condition when that is a certainty.
- > But next WITH and VALUES clauses also require MySQL 8.0
- ```WITH``` is available since MariaDB 10.2, ```VALUES``` – since MariaDB 10.3.
- In Oracle MySQL they are indeed only present starting with MySQL 8.0.
- > So I will try fixing this by moving ```case 'mysql':``` to below ```case 'mariadb':```.
- That will not work even with Oracle MySQL 8.0, their implementation of ```VALUES``` picks a different subset of the standard (requires the optional ```ROW``` keyword, while MariaDB and PostgreSQL don't accept it at all).
- > for WordPress requirements
- Are you saying that shared hostings won't move a muscle until WordPress forces them to by moving the bar higher?
- Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.
- > Would we avoid using a MySQL 8.0 feature?
- I need ```WITH``` here at least to improve performance of the heavily used method ```multiGet```.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20938-write" data-preview="issuecomment-20938-preview" data-update-url="/diogo/gnu-social/comments/20938" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20949">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-20949"><span class="time-since" title="Sun, 06 Sep 2020 07:04:27 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>I need WITH here at least to improve performance of the heavily used method multiGet.</p>
- </blockquote>
- <p>OK. Performance is important. And Thanks for telling me to differ logic for MariaDB and MySQL query.</p>
- <p>So I created patch for MySQL 5.7 (diff1.patch). Would you check it? My GNU social server is well done by this patch in latest commit.</p>
- <blockquote>
- <p>Are you saying that shared hostings won't move a muscle until WordPress forces them to by moving the bar higher? Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.</p>
- </blockquote>
- <p>Here is Oracle MySQL support policy (p. 21) (<a href="http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf" rel="nofollow">http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf</a>).</p>
- <p>EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.</p>
- <p>Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.</p>
- <p>In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?</p>
- <p>MySQL 5.7 will be used until Oct 2023 for EOL (for 3 years remainig). I think drop out of MySQL 5.7 is too early now.</p>
- <p>If it is important for using latest DB feature, would we prepare for non latest DB logic?</p>
- <p>For example, prepare <code>$config['db']['version']</code> item in <code>config.php</code>. Then if <code>$config['db']['version']</code> is specified and version is not latest, run for compatible SQL by if statement.</p>
- <p>This gives choice to user to use GNU social on running old (cheap) shared web hosting.</p>
-
- </div>
- <div class="raw-content hide">> I need WITH here at least to improve performance of the heavily used method multiGet.
- OK. Performance is important. And Thanks for telling me to differ logic for MariaDB and MySQL query.
- So I created patch for MySQL 5.7 (diff1.patch). Would you check it? My GNU social server is well done by this patch in latest commit.
- > Are you saying that shared hostings won't move a muscle until WordPress forces them to by moving the bar higher? Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.
- Here is Oracle MySQL support policy (p. 21) (http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf).
- EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.
- Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.
- In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?
- MySQL 5.7 will be used until Oct 2023 for EOL (for 3 years remainig). I think drop out of MySQL 5.7 is too early now.
- If it is important for using latest DB feature, would we prepare for non latest DB logic?
- For example, prepare `$config['db']['version']` item in `config.php`. Then if `$config['db']['version']` is specified and version is not latest, run for compatible SQL by if statement.
- This gives choice to user to use GNU social on running old (cheap) shared web hosting.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20949-write" data-preview="issuecomment-20949-preview" data-update-url="/diogo/gnu-social/comments/20949" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20950">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-20950"><span class="time-since" title="Sun, 06 Sep 2020 07:07:58 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p>It seems uploading feature is not work in NotABug.org.... So here is my patch.</p>
- <pre><code>diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
- index 0d22eb8628..adce5f6a88 100644
- --- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -163,17 +163,27 @@ class Memcached_DataObject extends Safe_DataObject
- break;
- case 'mysql':
- default:
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = 'NULL';
- + }
- + $subquery = "";
- + foreach ($vals_escaped as $i => $val) {
- + if ($i == 0) {
- + $subquery = "SELECT ${val} AS ${keyCol}, ${i} AS ${keyCol}_pos" ;
- + } else {
- + $subquery .= " UNION ALL SELECT ${val}, ${i}";
- + }
- + }
- $obj->_join = "\n" . sprintf(
- <<<END
- - RIGHT JOIN JSON_TABLE(
- - JSON_ARRAY(%s), '$[*]' COLUMNS (
- - {$keyCol} {$vals_cast_type} PATH '$',
- - {$keyCol}_pos FOR ORDINALITY
- - )
- + RIGHT JOIN (
- + %s
- ) AS {$join_tablename} USING ({$keyCol})
- END,
- - implode(',', $vals_escaped)
- + $subquery
- );
- + break;
- }
-
- // Filters both NULLs requested and non-matching NULLs
- </code></pre>
-
- </div>
- <div class="raw-content hide">It seems uploading feature is not work in NotABug.org.... So here is my patch.
- ```
- diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
- index 0d22eb8628..adce5f6a88 100644
- --- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -163,17 +163,27 @@ class Memcached_DataObject extends Safe_DataObject
- break;
- case 'mysql':
- default:
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = 'NULL';
- + }
- + $subquery = "";
- + foreach ($vals_escaped as $i => $val) {
- + if ($i == 0) {
- + $subquery = "SELECT ${val} AS ${keyCol}, ${i} AS ${keyCol}_pos" ;
- + } else {
- + $subquery .= " UNION ALL SELECT ${val}, ${i}";
- + }
- + }
- $obj->_join = "\n" . sprintf(
- <<<END
- - RIGHT JOIN JSON_TABLE(
- - JSON_ARRAY(%s), '$[*]' COLUMNS (
- - {$keyCol} {$vals_cast_type} PATH '$',
- - {$keyCol}_pos FOR ORDINALITY
- - )
- + RIGHT JOIN (
- + %s
- ) AS {$join_tablename} USING ({$keyCol})
- END,
- - implode(',', $vals_escaped)
- + $subquery
- );
- + break;
- }
-
- // Filters both NULLs requested and non-matching NULLs
- ```</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20950-write" data-preview="issuecomment-20950-preview" data-update-url="/diogo/gnu-social/comments/20950" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20952">
- <a class="avatar" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/XRevan86">XRevan86</a> commented <a href="#issuecomment-20952"><span class="time-since" title="Sun, 06 Sep 2020 14:14:31 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Collaborator
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.</p>
- </blockquote>
- <p>EOL for CentOS 7 = Jun 2024, CentOS 6 = Nov 2020.<br>
- So they have very long support periods. Doesn't mean anyone should continue using them with a clear conscience.</p>
- <blockquote>
- <p>Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.</p>
- </blockquote>
- <p>WordPress supports the latest MariaDB and Oracle MySQL fine, it's not against WordPress requirements to use something not ancient.</p>
- <blockquote>
- <p>WordPress also works with PHP 5.6.20+ and MySQL 5.0+</p>
- </blockquote>
- <p>And they also write this. And latest GNU social won't work on PHP 5.6 and MySQL 5.0, that's just how it is.</p>
- <blockquote>
- <p>In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?</p>
- </blockquote>
- <p>Admittedly, I am no expert on shared hosting providers.<br>
- And I should point out that Oracle MySQL 8.0 is not officially supported by GNU social.<br>
- The currently supported DBMS are: PostgreSQL 11+ and MariaDB 10.3+.</p>
- <p>I looked around the shared hosting provider of your choice, GMO DigiRock, and couldn't even find evidence of Oracle MySQL 5.7 there. They don't disclose their offerings much.<br>
- I do see that they have PHP 7.4 though, so I don't know why you picked PHP 7.3.<br>
- GNU social requires PHP 7.3+, it's not the maximum, it's the minimum. Same with WordPress, really.</p>
- <p>Either way, I'm sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7.<br>
- There is this page: <a href="https://mariadb.com/kb/en/web-hosting-providers-offering-mariadb/" rel="nofollow">Web Hosting Providers Offering MariaDB</a> for one thing.</p>
- <p>Fixed up your patch:</p>
- <pre><code class="language-diff">--- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -100,9 +100,18 @@ class Memcached_DataObject extends Safe_DataObject
- $db_type = common_config('db', 'type');
- if ($db_type === 'mysql') {
- $tmp_obj = new $cls();
- - $tmp_obj->query('SELECT 0 /*M! + 1 */ AS is_mariadb;');
- - if ($tmp_obj->fetch() && $tmp_obj->is_mariadb) {
- - $db_type = 'mariadb';
- + $tmp_obj->query(
- + <<<'END'
- + SELECT (0 /*M! + 1 */) <> 0 AS is_mariadb,
- + (0 /*!80004 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
- + END
- + );
- + if ($tmp_obj->fetch()) {
- + if ($tmp_obj->is_old_mysql) {
- + $db_type = 'old_mysql';
- + } elseif ($tmp_obj->is_mariadb) {
- + $db_type = 'mariadb';
- + }
- }
- }
-
- @@ -116,11 +125,17 @@ class Memcached_DataObject extends Safe_DataObject
- } else {
- $val_escaped = "'{$obj->escape($val)}'";
- }
- - if ($db_type !== 'mariadb') {
- - $vals_escaped[] = $val_escaped;
- - } else {
- - // A completely different approach for MariaDB (see below)
- + if ($db_type === 'mariadb') {
- $vals_escaped[] = "({$val_escaped},{$i})";
- + } elseif ($db_type === 'old_mysql') {
- + if ($i == 0) {
- + $vals_escaped[] = "SELECT {$val_escaped} AS {$keyCol}, "
- + . "{$i} AS {$keyCol}_pos";
- + } else {
- + $vals_escaped[] = "SELECT {$val_escaped},{$i}";
- + }
- + } else {
- + $vals_escaped[] = $val_escaped;
- }
- }
-
- @@ -164,6 +179,19 @@ class Memcached_DataObject extends Safe_DataObject
- implode(',', $vals_escaped)
- );
- break;
- + case 'old_mysql':
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = "SELECT NULL AS {$keyCol}, "
- + . "0 AS {$keyCol}_pos LIMIT 0";
- + }
- + $obj->_join = "\n" . sprintf(
- + "{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- + );
- + break;
- case 'mysql':
- default:
- $obj->_join = "\n" . sprintf(
- </code></pre>
- <p>But the problem with that approach is that it's pretty lengthy and it is even more verbose than what was there before, because… well, <code>SELECT 1 AS id, 0 AS id_pos UNION ALL SELECT 2,1 UNION ALL SELECT 3,2 UNION ALL SELECT 4,3 UNION ALL SELECT 5,4</code> for <code>VALUES (1,0),(2,1),(3,2),(4,3),(5,4)</code> or <code>JSON_ARRAY(1,2,3,4,5)</code>.</p>
-
- </div>
- <div class="raw-content hide">> EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.
- EOL for CentOS 7 = Jun 2024, CentOS 6 = Nov 2020.
- So they have very long support periods. Doesn't mean anyone should continue using them with a clear conscience.
- > Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.
- WordPress supports the latest MariaDB and Oracle MySQL fine, it's not against WordPress requirements to use something not ancient.
- > WordPress also works with PHP 5.6.20+ and MySQL 5.0+
- And they also write this. And latest GNU social won't work on PHP 5.6 and MySQL 5.0, that's just how it is.
- > In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?
- Admittedly, I am no expert on shared hosting providers.
- And I should point out that Oracle MySQL 8.0 is not officially supported by GNU social.
- The currently supported DBMS are: PostgreSQL 11+ and MariaDB 10.3+.
- I looked around the shared hosting provider of your choice, GMO DigiRock, and couldn't even find evidence of Oracle MySQL 5.7 there. They don't disclose their offerings much.
- I do see that they have PHP 7.4 though, so I don't know why you picked PHP 7.3.
- GNU social requires PHP 7.3+, it's not the maximum, it's the minimum. Same with WordPress, really.
- Either way, I'm sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7.
- There is this page: [Web Hosting Providers Offering MariaDB](https://mariadb.com/kb/en/web-hosting-providers-offering-mariadb/) for one thing.
- Fixed up your patch:
- ```diff
- --- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -100,9 +100,18 @@ class Memcached_DataObject extends Safe_DataObject
- $db_type = common_config('db', 'type');
- if ($db_type === 'mysql') {
- $tmp_obj = new $cls();
- - $tmp_obj->query('SELECT 0 /*M! + 1 */ AS is_mariadb;');
- - if ($tmp_obj->fetch() && $tmp_obj->is_mariadb) {
- - $db_type = 'mariadb';
- + $tmp_obj->query(
- + <<<'END'
- + SELECT (0 /*M! + 1 */) <> 0 AS is_mariadb,
- + (0 /*!80004 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
- + END
- + );
- + if ($tmp_obj->fetch()) {
- + if ($tmp_obj->is_old_mysql) {
- + $db_type = 'old_mysql';
- + } elseif ($tmp_obj->is_mariadb) {
- + $db_type = 'mariadb';
- + }
- }
- }
-
- @@ -116,11 +125,17 @@ class Memcached_DataObject extends Safe_DataObject
- } else {
- $val_escaped = "'{$obj->escape($val)}'";
- }
- - if ($db_type !== 'mariadb') {
- - $vals_escaped[] = $val_escaped;
- - } else {
- - // A completely different approach for MariaDB (see below)
- + if ($db_type === 'mariadb') {
- $vals_escaped[] = "({$val_escaped},{$i})";
- + } elseif ($db_type === 'old_mysql') {
- + if ($i == 0) {
- + $vals_escaped[] = "SELECT {$val_escaped} AS {$keyCol}, "
- + . "{$i} AS {$keyCol}_pos";
- + } else {
- + $vals_escaped[] = "SELECT {$val_escaped},{$i}";
- + }
- + } else {
- + $vals_escaped[] = $val_escaped;
- }
- }
-
- @@ -164,6 +179,19 @@ class Memcached_DataObject extends Safe_DataObject
- implode(',', $vals_escaped)
- );
- break;
- + case 'old_mysql':
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = "SELECT NULL AS {$keyCol}, "
- + . "0 AS {$keyCol}_pos LIMIT 0";
- + }
- + $obj->_join = "\n" . sprintf(
- + "{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- + );
- + break;
- case 'mysql':
- default:
- $obj->_join = "\n" . sprintf(
- ```
- But the problem with that approach is that it's pretty lengthy and it is even more verbose than what was there before, because… well, ```SELECT 1 AS id, 0 AS id_pos UNION ALL SELECT 2,1 UNION ALL SELECT 3,2 UNION ALL SELECT 4,3 UNION ALL SELECT 5,4``` for ```VALUES (1,0),(2,1),(3,2),(4,3),(5,4)``` or ```JSON_ARRAY(1,2,3,4,5)```.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20952-write" data-preview="issuecomment-20952-preview" data-update-url="/diogo/gnu-social/comments/20952" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20957">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-20957"><span class="time-since" title="Sun, 06 Sep 2020 23:19:24 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>WordPress supports the latest MariaDB and Oracle MySQL fine, it's not against WordPress requirements to use something not ancient.</p>
- </blockquote>
- <p>You are right. But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.</p>
- <p>My shared hosting provider GMO DigiRock (CORESERVER) show them spec in here (<a href="https://www.coreserver.jp/spec/" rel="nofollow">https://www.coreserver.jp/spec/</a>). They support MySQL 5.7 and PostgreSQL 9.6.</p>
- <p>I selected PHP 7.3 for more stability than PHP 7.4.</p>
- <blockquote>
- <p>Either way, I'm sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7. There is this page: Web Hosting Providers Offering MariaDB for one thing.</p>
- </blockquote>
- <p>Thanks for information. I saw MariaDB global supporting provider in first time.</p>
- <p>MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.</p>
- <p>GNU social v1.x supports MariaDB 5+, so I wish keep compatibility for non latest DB...</p>
- <p>I understand lengthy and less performance is not good for developer, but I think it is also important for supporting non latest DB for user.</p>
- <p>I am satisfied with your fixed up code for supporting MySQL 5.7 anyway. Thanks!</p>
- <p>MySQL 5.7 does not support <code>JSON_TABLE</code> but supports <a href="https://dev.mysql.com/doc/refman/5.7/en/json.html" rel="nofollow"><code>JSON_ARRAY</code></a>.</p>
- <p>I will try rewriting more better SQL with <code>JSON_ARRAY</code>. Please wait some days.</p>
-
- </div>
- <div class="raw-content hide">> WordPress supports the latest MariaDB and Oracle MySQL fine, it's not against WordPress requirements to use something not ancient.
- You are right. But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.
- My shared hosting provider GMO DigiRock (CORESERVER) show them spec in here (https://www.coreserver.jp/spec/). They support MySQL 5.7 and PostgreSQL 9.6.
- I selected PHP 7.3 for more stability than PHP 7.4.
- > Either way, I'm sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7. There is this page: Web Hosting Providers Offering MariaDB for one thing.
- Thanks for information. I saw MariaDB global supporting provider in first time.
- MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.
- GNU social v1.x supports MariaDB 5+, so I wish keep compatibility for non latest DB...
- I understand lengthy and less performance is not good for developer, but I think it is also important for supporting non latest DB for user.
- I am satisfied with your fixed up code for supporting MySQL 5.7 anyway. Thanks!
- MySQL 5.7 does not support `JSON_TABLE` but supports [`JSON_ARRAY`](https://dev.mysql.com/doc/refman/5.7/en/json.html).
- I will try rewriting more better SQL with `JSON_ARRAY`. Please wait some days.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20957-write" data-preview="issuecomment-20957-preview" data-update-url="/diogo/gnu-social/comments/20957" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20958">
- <a class="avatar" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/XRevan86">XRevan86</a> commented <a href="#issuecomment-20958"><span class="time-since" title="Sun, 06 Sep 2020 23:56:50 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Collaborator
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>My shared hosting provider GMO DigiRock (CORESERVER) show them spec in here (<a href="https://www.coreserver.jp/spec/" rel="nofollow">https://www.coreserver.jp/spec/</a>).</p>
- </blockquote>
- <p>Didn't see that page…<br>
- "sqlight" is an interesting option to have :-). So is "python 2/3" with no specifics.</p>
- <blockquote>
- <p>They support MySQL 5.7 and PostgreSQL 9.6.</p>
- </blockquote>
- <p>Oof, well, at least not PostgreSQL 9.2 as their other resources claim.</p>
- <blockquote>
- <p>I selected PHP 7.3 for more stability than PHP 7.4.</p>
- </blockquote>
- <p>Really doesn't matter unless there are some issues specific to the shared hosting.</p>
- <blockquote>
- <p>MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.</p>
- </blockquote>
- <p>Compared to Oracle MySQL 5.7 new enough MariaDB is highly compatible, yes. Not in the other direction and not with Oracle MySQL 8.0 however.</p>
- <blockquote>
- <p>But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.</p>
- </blockquote>
- <p>It's like they don't want their customers to have the best coverage possible, seems self-defeating.</p>
- <blockquote>
- <p>MySQL 5.7 does not support <code>JSON_TABLE</code> but supports <a href="https://dev.mysql.com/doc/refman/5.7/en/json.html" rel="nofollow"><code>JSON_ARRAY</code></a>.<br>
- I will try rewriting more better SQL with <code>JSON_ARRAY</code>. Please wait some days.</p>
- </blockquote>
- <p><code>JSON_ARRAY</code> is used <strong>with</strong> <code>JSON_TABLE</code>, you could try using <code>json_contains</code> and <code>json_search</code>, but without <code>WITH</code> or <a href="https://mariadb.com/kb/en/set-statement/" rel="nofollow"><code>SET STATEMENT</code></a> it is problematic not to send the key values twice.<br>
- And won't be able to return exactly the tuples in order and amount requested, duplicates or not. But I added that just because it's easy with how it's done now, that can be removed, not that important.</p>
-
- </div>
- <div class="raw-content hide">> My shared hosting provider GMO DigiRock (CORESERVER) show them spec in here (https://www.coreserver.jp/spec/).
- Didn't see that page…
- "sqlight" is an interesting option to have :-). So is "python 2/3" with no specifics.
- > They support MySQL 5.7 and PostgreSQL 9.6.
- Oof, well, at least not PostgreSQL 9.2 as their other resources claim.
- > I selected PHP 7.3 for more stability than PHP 7.4.
- Really doesn't matter unless there are some issues specific to the shared hosting.
- > MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.
- Compared to Oracle MySQL 5.7 new enough MariaDB is highly compatible, yes. Not in the other direction and not with Oracle MySQL 8.0 however.
- > But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.
- It's like they don't want their customers to have the best coverage possible, seems self-defeating.
- > MySQL 5.7 does not support ```JSON_TABLE``` but supports [```JSON_ARRAY```](https://dev.mysql.com/doc/refman/5.7/en/json.html).
- > I will try rewriting more better SQL with ```JSON_ARRAY```. Please wait some days.
- ```JSON_ARRAY``` is used **with** ```JSON_TABLE```, you could try using ```json_contains``` and ```json_search```, but without ```WITH``` or [```SET STATEMENT```](https://mariadb.com/kb/en/set-statement/) it is problematic not to send the key values twice.
- And won't be able to return exactly the tuples in order and amount requested, duplicates or not. But I added that just because it's easy with how it's done now, that can be removed, not that important.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20958-write" data-preview="issuecomment-20958-preview" data-update-url="/diogo/gnu-social/comments/20958" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20959">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-20959"><span class="time-since" title="Mon, 07 Sep 2020 03:14:28 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p>Hi. I tried using <code>JSON_ARRAY</code>, but I gave up.</p>
- <p>In my study, this answer (<a href="https://stackoverflow.com/questions/39906435/convert-json-array-in-mysql-to-rows/42153230#42153230" rel="nofollow">Convert JSON array in MySQL to rows - Stack Overflow</a>) is the nearest, but this answer needs multiple line <code>SELECT</code>. This is the same as <code>UNION ALL</code>. So I gave up.</p>
- <p>Instead, I checked your fixed code on my server. I found a bug. Last 3 lines, <code>$join_keyword</code> variable is used, but <strong>this variable is not assigned</strong>. I replaced this to <code>RIGHT JOIN</code>, then code works well.</p>
- <pre><code class="language-diff">+ $obj->_join = "\n" . sprintf(
- + "{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- </code></pre>
- <p>After fix this bug, please commit it and close this issue.</p>
- <p>Anyway, If it works on MySQL 5.7, there is no problem. Thanks!</p>
-
- </div>
- <div class="raw-content hide">Hi. I tried using `JSON_ARRAY`, but I gave up.
- In my study, this answer ([Convert JSON array in MySQL to rows - Stack Overflow](https://stackoverflow.com/questions/39906435/convert-json-array-in-mysql-to-rows/42153230#42153230)) is the nearest, but this answer needs multiple line `SELECT`. This is the same as `UNION ALL`. So I gave up.
- Instead, I checked your fixed code on my server. I found a bug. Last 3 lines, `$join_keyword` variable is used, but **this variable is not assigned**. I replaced this to `RIGHT JOIN`, then code works well.
- ``` diff
- + $obj->_join = "\n" . sprintf(
- + "{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- ```
- After fix this bug, please commit it and close this issue.
- Anyway, If it works on MySQL 5.7, there is no problem. Thanks!</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20959-write" data-preview="issuecomment-20959-preview" data-update-url="/diogo/gnu-social/comments/20959" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20965">
- <a class="avatar" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/XRevan86">XRevan86</a> commented <a href="#issuecomment-20965"><span class="time-since" title="Mon, 07 Sep 2020 16:30:09 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Collaborator
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p>Pushed a test commit, please, try.</p>
-
- </div>
- <div class="raw-content hide">Pushed a test commit, please, try.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20965-write" data-preview="issuecomment-20965-preview" data-update-url="/diogo/gnu-social/comments/20965" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="event">
- <span class="octicon octicon-circle-slash"></span>
- <a class="ui avatar image" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <span class="text grey"><a href="/XRevan86">XRevan86</a> closed <a id="event-20966" href="#event-20966"><span class="time-since" title="Mon, 07 Sep 2020 16:30:09 UTC">2 months ago</span></a></span>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20981">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-20981"><span class="time-since" title="Tue, 08 Sep 2020 11:37:52 UTC">2 months ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p><a href="/Xrevan86." rel="nofollow">@Xrevan86.</a> Thanks for commit. I checked your commit (4290ec312). MySQL 5.7 works well anyway.</p>
- <p>But after this commit, my home time line needs <strong>some minutes</strong> for finishing page rendering. It is too slowly.</p>
- <p>Previous <a href="https://notabug.org/diogo/gnu-social/commit/08145f635f8cf856fd66d9e29281b0c8ca3390a2" rel="nofollow">commit</a> + your last patch (with fixed bug in this issue) is OK (I checked).</p>
- <p>But your commit (<a href="/diogo/gnu-social/commit/4290ec3120b4468093a446653ac3fd8147ec734e" rel="nofollow"><code>4290ec3120</code></a>) is a quite different and too many volume from this patch.</p>
- <p>Also if there is no problem, difference is OK.</p>
- <p>Your commit use some JSON functions. Is JSON functions heavy?</p>
- <p>I was satisfied with your last patch. Why did you change commit from last patch?</p>
- <p>If there is no problem, it is all OK how implementation.</p>
-
- </div>
- <div class="raw-content hide">@Xrevan86. Thanks for commit. I checked your commit (4290ec312). MySQL 5.7 works well anyway.
- But after this commit, my home time line needs **some minutes** for finishing page rendering. It is too slowly.
- Previous [commit](https://notabug.org/diogo/gnu-social/commit/08145f635f8cf856fd66d9e29281b0c8ca3390a2) + your last patch (with fixed bug in this issue) is OK (I checked).
- But your commit (4290ec3120b4468093a446653ac3fd8147ec734e) is a quite different and too many volume from this patch.
- Also if there is no problem, difference is OK.
- Your commit use some JSON functions. Is JSON functions heavy?
- I was satisfied with your last patch. Why did you change commit from last patch?
- If there is no problem, it is all OK how implementation.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20981-write" data-preview="issuecomment-20981-preview" data-update-url="/diogo/gnu-social/comments/20981" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="event">
- <span class="octicon octicon-primitive-dot"></span>
- <a class="ui avatar image" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <span class="text grey"><a href="/senooken">senooken</a> reopened <a id="event-20982" href="#event-20982"><span class="time-since" title="Tue, 08 Sep 2020 11:37:52 UTC">2 months ago</span></a></span>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-20984">
- <a class="avatar" href="/XRevan86">
- <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/XRevan86">XRevan86</a> commented <a href="#issuecomment-20984"><span class="time-since" title="Wed, 09 Sep 2020 13:14:39 UTC">1 month ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Collaborator
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <blockquote>
- <p>Your commit uses some JSON functions. Are JSON functions heavy?</p>
- </blockquote>
- <p><a href="/senooken" rel="nofollow">@senooken</a>, yes and no. Because <code>json_search</code> can only work with strings, I tried casting every integer, which is probably the bit that's failing miserably.</p>
-
- </div>
- <div class="raw-content hide">> Your commit uses some JSON functions. Are JSON functions heavy?
- @senooken, yes and no. Because ```json_search``` can only work with strings, I tried casting every integer, which is probably the bit that's failing miserably.</div>
- <div class="edit-content-zone hide" data-write="issuecomment-20984-write" data-preview="issuecomment-20984-preview" data-update-url="/diogo/gnu-social/comments/20984" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
-
- <div class="comment" id="issuecomment-21021">
- <a class="avatar" href="/senooken">
- <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
- </a>
- <div class="content">
- <div class="ui top attached header">
- <span class="text grey"><a href="/senooken">SENOO, Ken</a> commented <a href="#issuecomment-21021"><span class="time-since" title="Fri, 11 Sep 2020 01:19:59 UTC">1 month ago</span></a></span>
- <div class="ui right actions">
-
- <div class="item tag">
-
- Poster
-
- </div>
-
-
- </div>
- </div>
- <div class="ui attached segment">
- <div class="render-content markdown has-emoji">
-
- <p>After your comment, it seems your commit (4290ec3120) was dropped out from commit history.</p>
- <p>What did you think about this commit?</p>
- <p>I think your last patch is OK ever last commit (adc689cb15). I want to include this patch.</p>
- <p>Is there a problem? To make sure I show this patch again in following.</p>
- <p>This patch can be imported to run <code>patch -p 1 <[patch-file-name]</code> command in root directory (I think you know...).</p>
- <pre><code class="language-diff">diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
- index 0d22eb8628..d71afed57c 100644
- --- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -98,9 +98,18 @@ class Memcached_DataObject extends Safe_DataObject
- $db_type = common_config('db', 'type');
- if ($db_type === 'mysql') {
- $tmp_obj = new $cls();
- - $tmp_obj->query('SELECT 0 /*M! + 1 */ AS is_mariadb;');
- - if ($tmp_obj->fetch() && $tmp_obj->is_mariadb) {
- - $db_type = 'mariadb';
- + $tmp_obj->query(
- + <<<'END'
- + SELECT 0 /*M! + 1 */ AS is_mariadb,
- + (0 /*!80001 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
- + END
- + );
- + if ($tmp_obj->fetch()) {
- + if ($tmp_obj->is_old_mysql) {
- + $db_type = 'old_mysql';
- + } elseif ($tmp_obj->is_mariadb) {
- + $db_type = 'mariadb';
- + }
- }
- }
-
- @@ -114,11 +123,17 @@ class Memcached_DataObject extends Safe_DataObject
- } else {
- $val_escaped = "'{$obj->escape($val)}'";
- }
- - if ($db_type !== 'mariadb') {
- - $vals_escaped[] = $val_escaped;
- + if ($db_type === 'mariadb') {
- + $vals_escaped[] = "({$val_escaped},{$i})";
- + } elseif ($db_type === 'old_mysql') {
- + if ($i == 0) {
- + $vals_escaped[] = "SELECT {$val_escaped} AS {$keyCol}, "
- + . "{$i} AS {$keyCol}_pos";
- + } else {
- + $vals_escaped[] = "SELECT {$val_escaped},{$i}";
- + }
- } else {
- - // A completely different approach for MariaDB (see below)
- - $vals_escaped[] = "({$val_escaped},{$i})";
- + $vals_escaped[] = $val_escaped;
- }
- }
-
- @@ -161,6 +176,17 @@ class Memcached_DataObject extends Safe_DataObject
- implode(',', $vals_escaped)
- );
- break;
- + case 'old_mysql':
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = "SELECT NULL AS {$keyCol}, "
- + . "0 AS {$keyCol}_pos LIMIT 0";
- + }
- + $obj->_join = "\n" . sprintf(
- + "RIGHT JOJIN (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- + );
- + break;
- case 'mysql':
- default:
- $obj->_join = "\n" . sprintf(
- </code></pre>
-
- </div>
- <div class="raw-content hide">After your comment, it seems your commit (4290ec3120) was dropped out from commit history.
- What did you think about this commit?
- I think your last patch is OK ever last commit (adc689cb15). I want to include this patch.
- Is there a problem? To make sure I show this patch again in following.
- This patch can be imported to run `patch -p 1 <[patch-file-name]` command in root directory (I think you know...).
- ``` diff
- diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
- index 0d22eb8628..d71afed57c 100644
- --- a/classes/Memcached_DataObject.php
- +++ b/classes/Memcached_DataObject.php
- @@ -98,9 +98,18 @@ class Memcached_DataObject extends Safe_DataObject
- $db_type = common_config('db', 'type');
- if ($db_type === 'mysql') {
- $tmp_obj = new $cls();
- - $tmp_obj->query('SELECT 0 /*M! + 1 */ AS is_mariadb;');
- - if ($tmp_obj->fetch() && $tmp_obj->is_mariadb) {
- - $db_type = 'mariadb';
- + $tmp_obj->query(
- + <<<'END'
- + SELECT 0 /*M! + 1 */ AS is_mariadb,
- + (0 /*!80001 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
- + END
- + );
- + if ($tmp_obj->fetch()) {
- + if ($tmp_obj->is_old_mysql) {
- + $db_type = 'old_mysql';
- + } elseif ($tmp_obj->is_mariadb) {
- + $db_type = 'mariadb';
- + }
- }
- }
-
- @@ -114,11 +123,17 @@ class Memcached_DataObject extends Safe_DataObject
- } else {
- $val_escaped = "'{$obj->escape($val)}'";
- }
- - if ($db_type !== 'mariadb') {
- - $vals_escaped[] = $val_escaped;
- + if ($db_type === 'mariadb') {
- + $vals_escaped[] = "({$val_escaped},{$i})";
- + } elseif ($db_type === 'old_mysql') {
- + if ($i == 0) {
- + $vals_escaped[] = "SELECT {$val_escaped} AS {$keyCol}, "
- + . "{$i} AS {$keyCol}_pos";
- + } else {
- + $vals_escaped[] = "SELECT {$val_escaped},{$i}";
- + }
- } else {
- - // A completely different approach for MariaDB (see below)
- - $vals_escaped[] = "({$val_escaped},{$i})";
- + $vals_escaped[] = $val_escaped;
- }
- }
-
- @@ -161,6 +176,17 @@ class Memcached_DataObject extends Safe_DataObject
- implode(',', $vals_escaped)
- );
- break;
- + case 'old_mysql':
- + // Delivers an empty set
- + if (count($vals_escaped) == 0) {
- + $vals_escaped[] = "SELECT NULL AS {$keyCol}, "
- + . "0 AS {$keyCol}_pos LIMIT 0";
- + }
- + $obj->_join = "\n" . sprintf(
- + "RIGHT JOJIN (%s) AS {$join_tablename} USING ({$keyCol})",
- + implode(' UNION ALL ', $vals_escaped)
- + );
- + break;
- case 'mysql':
- default:
- $obj->_join = "\n" . sprintf(
- ```</div>
- <div class="edit-content-zone hide" data-write="issuecomment-21021-write" data-preview="issuecomment-21021-preview" data-update-url="/diogo/gnu-social/comments/21021" data-context="/diogo/gnu-social"></div>
- </div>
-
- </div>
- </div>
-
-
-
-
- <div class="ui warning message">
- <a href="/user/login?redirect_to=/diogo/gnu-social/issues/206">Sign in</a> to join this conversation.
- </div>
-
- </ui>
- </div>
- <div class="four wide column">
- <div class="ui segment metas">
- <div class="ui disabled floating jump select-label dropdown">
- <span class="text">
- <strong>Labels</strong>
- <span class="octicon octicon-gear"></span>
- </span>
- <div class="filter menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/label">
- <div class="no-select item">Clear labels</div>
-
- <a class=" item" href="#" data-id="1564" data-id-selector="#label_1564"><span class="octicon "></span><span class="label color" style="background-color: #fbca04"></span> bounty</a>
-
- <a class=" item" href="#" data-id="1483" data-id-selector="#label_1483"><span class="octicon "></span><span class="label color" style="background-color: #ee0701"></span> bug</a>
-
- <a class=" item" href="#" data-id="1484" data-id-selector="#label_1484"><span class="octicon "></span><span class="label color" style="background-color: #cccccc"></span> duplicate</a>
-
- <a class=" item" href="#" data-id="1485" data-id-selector="#label_1485"><span class="octicon "></span><span class="label color" style="background-color: #84b6eb"></span> enhancement</a>
-
- <a class=" item" href="#" data-id="1486" data-id-selector="#label_1486"><span class="octicon "></span><span class="label color" style="background-color: #128a0c"></span> help wanted</a>
-
- <a class=" item" href="#" data-id="1487" data-id-selector="#label_1487"><span class="octicon "></span><span class="label color" style="background-color: #e6e6e6"></span> invalid</a>
-
- <a class=" item" href="#" data-id="1488" data-id-selector="#label_1488"><span class="octicon "></span><span class="label color" style="background-color: #cc317c"></span> question</a>
-
- <a class=" item" href="#" data-id="1565" data-id-selector="#label_1565"><span class="octicon "></span><span class="label color" style="background-color: #d4c5f9"></span> RFC</a>
-
- <a class=" item" href="#" data-id="1841" data-id-selector="#label_1841"><span class="octicon "></span><span class="label color" style="background-color: #0052cc"></span> v3</a>
-
- <a class=" item" href="#" data-id="1489" data-id-selector="#label_1489"><span class="octicon "></span><span class="label color" style="background-color: #ffffff"></span> wontfix</a>
-
- </div>
- </div>
- <div class="ui labels list">
- <span class="no-select item ">No Label</span>
-
- <div class="item">
- <a class="ui label hide" id="label_1564" href="/diogo/gnu-social/issues?labels=1564" style="color: #000; background-color: #fbca04">bounty</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1483" href="/diogo/gnu-social/issues?labels=1483" style="color: #fff; background-color: #ee0701">bug</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1484" href="/diogo/gnu-social/issues?labels=1484" style="color: #000; background-color: #cccccc">duplicate</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1485" href="/diogo/gnu-social/issues?labels=1485" style="color: #000; background-color: #84b6eb">enhancement</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1486" href="/diogo/gnu-social/issues?labels=1486" style="color: #fff; background-color: #128a0c">help wanted</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1487" href="/diogo/gnu-social/issues?labels=1487" style="color: #000; background-color: #e6e6e6">invalid</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1488" href="/diogo/gnu-social/issues?labels=1488" style="color: #fff; background-color: #cc317c">question</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1565" href="/diogo/gnu-social/issues?labels=1565" style="color: #000; background-color: #d4c5f9">RFC</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1841" href="/diogo/gnu-social/issues?labels=1841" style="color: #fff; background-color: #0052cc">v3</a>
- </div>
-
- <div class="item">
- <a class="ui label hide" id="label_1489" href="/diogo/gnu-social/issues?labels=1489" style="color: #000; background-color: #ffffff">wontfix</a>
- </div>
-
- </div>
- <div class="ui divider"></div>
- <div class="ui disabled floating jump select-milestone dropdown">
- <span class="text">
- <strong>Milestone</strong>
- <span class="octicon octicon-gear"></span>
- </span>
- <div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/milestone">
- <div class="no-select item">Clear milestone</div>
-
-
- </div>
- </div>
- <div class="ui select-milestone list">
- <span class="no-select item ">No Milestone</span>
- <div class="selected">
-
- </div>
- </div>
- <div class="ui divider"></div>
- <input id="assignee_id" name="assignee_id" type="hidden" value="">
- <div class="ui disabled floating jump select-assignee dropdown">
- <span class="text">
- <strong>Assignee</strong>
- <span class="octicon octicon-gear"></span>
- </span>
- <div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/assignee">
- <div class="no-select item">Clear assignee</div>
-
- </div>
- </div>
- <div class="ui select-assignee list">
- <span class="no-select item ">No assignee</span>
- <div class="selected">
-
- </div>
- </div>
- <div class="ui divider"></div>
- <div class="ui participants">
- <span class="text"><strong>2 Participants</strong></span>
- <div>
-
- <a href="/senooken">
- <img class="ui avatar image poping up" src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a" data-content="SENOO, Ken" data-position="top center" data-variation="small inverted">
- </a>
-
- <a href="/XRevan86">
- <img class="ui avatar image poping up" src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332" data-content="XRevan86" data-position="top center" data-variation="small inverted">
- </a>
-
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="hide" id="edit-content-form">
- <div class="ui comment form">
- <div class="ui top attached tabular menu">
- <a class="active write item">Write</a>
- <a class="preview item" data-url="/api/v1/markdown" data-context="/diogo/gnu-social">Preview</a>
- </div>
- <div class="ui bottom attached active write tab segment">
- <textarea tabindex="1" id="content" name="content"></textarea>
- </div>
- <div class="ui bottom attached tab preview segment markdown">
- Loading...
- </div>
- <div class="text right edit buttons">
- <div class="ui basic blue cancel button" tabindex="3">Cancel</div>
- <div class="ui green save button" tabindex="2">Save</div>
- </div>
- </div>
- </div>
- <div class="hide" id="no-content">
- <span class="no-content">There is no content yet.</span>
- </div>
- </div>
-
- </div>
- </div>
- </div>
- <footer>
- <div class="ui container">
- <div class="ui left">
- <a href="/tos">Terms of Service</a>
- •
- <a href="/about">About us</a>
- •
- <a href="/outages">Outages</a>
- •
- <a href="/hp/gogs/issues">Report a problem</a>
- •
- <a href="/assets/librejs/librejs.html" data-jslicense="1">Javascript licenses</a>
- •
- <a href="/fingerprints">SSH Fingerprints</a>
- </div>
- <div class="ui right links">
-
- <div class="ui language bottom floating slide up dropdown link item">
- <i class="world icon"></i>
- <div class="text">English</div>
- <div class="menu">
-
- <a class="item active selected" href="#">English</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-CN">简体中文</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-HK">繁體中文(香港)</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-TW">繁體中文(臺灣)</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=de-DE">Deutsch</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=fr-FR">français</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=nl-NL">Nederlands</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=lv-LV">latviešu</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=ru-RU">русский</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=ja-JP">日本語</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=es-ES">español</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=pt-BR">português do Brasil</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=pl-PL">polski</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=bg-BG">български</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=it-IT">italiano</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=fi-FI">suomi</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=tr-TR">Türkçe</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=cs-CZ">čeština</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=sr-SP">српски</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=sv-SE">svenska</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=ko-KR">한국어</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=gl-ES">galego</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=uk-UA">українська</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=en-GB">English (United Kingdom)</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=hu-HU">Magyar</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=sk-SK">Slovenčina</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=id-ID">Indonesian</a>
-
- <a class="item " href="/diogo/gnu-social/issues/206?lang=fa-IR">Persian</a>
-
- </div>
- </div>
-
- </div>
- </div>
- </footer>
- </body>
- <link rel="stylesheet" href="/plugins/highlight-9.6.0/github.css">
- <script src="/plugins/highlight-9.6.0/highlight.pack.js"></script>
- <link rel="stylesheet" href="/plugins/dropzone-4.2.0/dropzone.css">
- <script src="/plugins/dropzone-4.2.0/dropzone.js"></script>
- <script src="/js/libs/emojify-1.1.0.min.js"></script>
- <script src="/js/libs/clipboard-1.5.9.min.js"></script>
-
- </html>
|