206 71 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748
  1. <!DOCTYPE html>
  2. <html>
  3. <head data-suburl="">
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  6. <meta name="author" content="diogo" />
  7. <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." />
  8. <meta name="keywords" content="go, git, self-hosted, gogs">
  9. <meta name="referrer" content="no-referrer" />
  10. <meta name="_csrf" content="pZsngCZUGpJ2KgKnqXo_SF_30Ow6MTYwNDc5MjM3Mjc3MjYxNTY2Ng==" />
  11. <meta name="_suburl" content="" />
  12. <meta property="og:url" content="https://notabug.org/diogo/gnu-social" />
  13. <meta property="og:type" content="object" />
  14. <meta property="og:title" content="diogo/gnu-social">
  15. <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.">
  16. <meta property="og:image" content="https://notabug.org/avatars/12290" />
  17. <link rel="shortcut icon" href="/img/favicon.png" />
  18. <script src="/js/jquery-1.11.3.min.js"></script>
  19. <script src="/js/libs/jquery.are-you-sure.js"></script>
  20. <link href="/img/icon-48.ico" rel="icon" type="image/x-icon" />
  21. <link href="/img/icon-60.png" rel="apple-touch-icon">
  22. <link href="/img/icon-76.png" rel="apple-touch-icon" sizes="76x76">
  23. <link href="/img/icon-120.png" rel="apple-touch-icon" sizes="120x120">
  24. <link href="/img/icon-152.png" rel="apple-touch-icon" sizes="152x152">
  25. <link href="/img/icon-240.png" rel="apple-touch-icon" sizes="240x240">
  26. <link rel="stylesheet" href="/assets/font-awesome-4.6.3/css/font-awesome.min.css">
  27. <link rel="stylesheet" href="/assets/octicons-4.3.0/octicons.min.css">
  28. <link rel="stylesheet" href="/css/semantic-2.2.13.min.css">
  29. <link rel="stylesheet" href="/css/gogs.css?v=6fc9e85aa88133794d3434ea74aa557a">
  30. <link rel="stylesheet" href="/css/notabug.css">
  31. <script src="/js/semantic-2.2.13.min.js"></script>
  32. <script src="/js/gogs.js?v=6fc9e85aa88133794d3434ea74aa557a"></script>
  33. <title>Please avoid using MySQL 8.0 feature for many shared web hosting - NotABug.org: Free code hosting</title>
  34. <meta name="theme-color" content="#428bca">
  35. <noscript><style>.nojs-popup:hover > .menu { display: block ; }</style></noscript>
  36. </head>
  37. <body>
  38. <div class="full height">
  39. <noscript>Please enable JavaScript in your browser!</noscript>
  40. <div id="header-div" class="following bar light">
  41. <div class="ui container">
  42. <div class="ui grid">
  43. <div class="column">
  44. <div class="ui top secondary menu">
  45. <a class="item brand" href="/">
  46. <img class="ui mini image" src="/img/favicon.png">
  47. </a>
  48. <a class="item" href="/">Home</a>
  49. <a class="item" href="/explore/repos">Explore</a>
  50. <a class="notabug-item item" href="/help" rel="noreferrer">Help</a>
  51. <div class="right menu">
  52. <a class="item" href="/user/sign_up">
  53. <i class="octicon octicon-person"></i> Register
  54. </a>
  55. <a class="item" href="/user/login?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
  56. <i class="octicon octicon-sign-in"></i> Sign In
  57. </a>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. <div class="repository view issue pull">
  65. <div class="header-wrapper">
  66. <div class="ui container">
  67. <div class="ui vertically padded grid head">
  68. <div class="column">
  69. <div class="ui header">
  70. <div class="ui huge breadcrumb">
  71. <i class="mega-octicon octicon-repo"></i>
  72. <a href="/diogo">diogo</a>
  73. <div class="divider"> / </div>
  74. <a href="/diogo/gnu-social">gnu-social</a>
  75. </div>
  76. <div class="ui right">
  77. <div class="ui labeled button" tabindex="0">
  78. <a class="ui basic button" href="/diogo/gnu-social/action/watch?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
  79. <i class="icon fa-eye-slash"></i>Watch
  80. </a>
  81. <a class="ui basic label" href="/diogo/gnu-social/watchers">
  82. 9
  83. </a>
  84. </div>
  85. <div class="ui labeled button" tabindex="0">
  86. <a class="ui basic button" href="/diogo/gnu-social/action/star?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f206">
  87. <i class="icon fa-star-o"></i>Star
  88. </a>
  89. <a class="ui basic label" href="/diogo/gnu-social/stars">
  90. 22
  91. </a>
  92. </div>
  93. <div class="ui labeled button" tabindex="0">
  94. <a class="ui basic button " href="/repo/fork/25974">
  95. <i class="octicon octicon-repo-forked"></i>Fork
  96. </a>
  97. <a class="ui basic label" href="/diogo/gnu-social/forks">
  98. 21
  99. </a>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="ui tabs container">
  107. <div class="ui tabular menu navbar">
  108. <a class=" item" href="/diogo/gnu-social">
  109. <i class="octicon octicon-file-text"></i> Files
  110. </a>
  111. <a class="active item" href="/diogo/gnu-social/issues">
  112. <i class="octicon octicon-issue-opened"></i> Issues <span class="ui blue small label">73</span>
  113. </a>
  114. <a class=" item" href="/diogo/gnu-social/pulls">
  115. <i class="octicon octicon-git-pull-request"></i> Pull Requests <span class="ui blue small label">3</span>
  116. </a>
  117. <a class=" item" href="/diogo/gnu-social/wiki">
  118. <i class="octicon octicon-book"></i> Wiki
  119. </a>
  120. </div>
  121. </div>
  122. <div class="ui tabs divider"></div>
  123. </div>
  124. <div class="ui container">
  125. <div class="navbar">
  126. <div class="ui compact small menu">
  127. <a class=" item" href="/diogo/gnu-social/labels">Labels</a>
  128. <a class=" item" href="/diogo/gnu-social/milestones">Milestones</a>
  129. </div>
  130. <div class="ui right">
  131. <a class="ui green button" href="/diogo/gnu-social/issues/new">New Issue</a>
  132. </div>
  133. </div>
  134. <div class="ui divider"></div>
  135. <div>
  136. <div class="ui grid">
  137. <div class="sixteen wide column title">
  138. <div class="ui grid">
  139. <h1 class="twelve wide column">
  140. <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>
  141. <div id="edit-title-input" class="ui input" style="display: none">
  142. <input value="Please avoid using MySQL 8.0 feature for many shared web hosting">
  143. </div>
  144. </h1>
  145. </div>
  146. <div class="ui green large label"><i class="octicon octicon-issue-opened"></i> Open</div>
  147. <span class="time-desc">
  148. opened <span class="time-since" title="Sat, 05 Sep 2020 11:23:37 UTC">2 months ago</span> by <a href="/senooken">senooken</a>
  149. ·
  150. 11 comments
  151. </span>
  152. <div class="ui divider"></div>
  153. </div>
  154. <div class="twelve wide column comment-list">
  155. <ui class="ui comments">
  156. <div class="comment">
  157. <a class="avatar" href="/senooken">
  158. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  159. </a>
  160. <div class="content">
  161. <div class="ui top attached header">
  162. <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>
  163. <div class="ui right actions">
  164. </div>
  165. </div>
  166. <div class="ui attached segment">
  167. <div class="render-content markdown has-emoji">
  168. <p>I checked latest commit ( <code><a href="https://notabug.org/diogo/gnu-social/commit/4884a97223d61e516a645ab3ae4b6ac009c12b63" rel="nofollow">4884a97223</a></code>).</p>
  169. <p>After that I cannot access my timeline due to a DB error.</p>
  170. <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>
  171. <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>
  172. <p>So I will try fixing this by moving <code>case &#39;mysql&#39;:</code> below <code>case &#39;mariadb&#39;:</code>.</p>
  173. <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>
  174. <ul>
  175. <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>
  176. <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>
  177. </ul>
  178. <p>I am not familiar with SQL.</p>
  179. <p>Could you rewrite this code without the <code>WITH</code> and <code>VALUES</code> clauses, <a href="/XRevan86" rel="nofollow">@XRevan86</a>?</p>
  180. <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>
  181. <p>Would we avoid using a MySQL 8.0 feature?</p>
  182. </div>
  183. <div class="raw-content hide">I checked latest commit (https://notabug.org/diogo/gnu-social/commit/4884a97223d61e516a645ab3ae4b6ac009c12b63).
  184. After that I cannot access my timeline due to a DB error.
  185. 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`.
  186. My [GNU social server](https://social.senooken.jp/senooken) is hosted by a shared web hosting service (MySQL 5.7, PHP 7.3).
  187. So I will try fixing this by moving `case &#39;mysql&#39;:` below `case &#39;mariadb&#39;:`.
  188. 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/)).
  189. - WITH: https://dev.mysql.com/doc/refman/8.0/en/with.html
  190. - VALUES: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html
  191. I am not familiar with SQL.
  192. Could you rewrite this code without the `WITH` and `VALUES` clauses, @XRevan86?
  193. 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/).
  194. Would we avoid using a MySQL 8.0 feature?</div>
  195. <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>
  196. </div>
  197. </div>
  198. </div>
  199. <div class="comment" id="issuecomment-20938">
  200. <a class="avatar" href="/XRevan86">
  201. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  202. </a>
  203. <div class="content">
  204. <div class="ui top attached header">
  205. <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>
  206. <div class="ui right actions">
  207. <div class="item tag">
  208. Collaborator
  209. </div>
  210. </div>
  211. </div>
  212. <div class="ui attached segment">
  213. <div class="render-content markdown has-emoji">
  214. <blockquote>
  215. <p>This commit requires a MySQL 8.0 feature JSON_TABLE</p>
  216. </blockquote>
  217. <p>Just for clarity, it is planned to be added in MariaDB 10.6. I&#39;ll change the version condition when that is a certainty.</p>
  218. <blockquote>
  219. <p>But next WITH and VALUES clauses also require MySQL 8.0</p>
  220. </blockquote>
  221. <p><code>WITH</code> is available since MariaDB 10.2, <code>VALUES</code> – since MariaDB 10.3.<br>
  222. In Oracle MySQL they are indeed only present starting with MySQL 8.0.</p>
  223. <blockquote>
  224. <p>So I will try fixing this by moving <code>case &#39;mysql&#39;:</code> to below <code>case &#39;mariadb&#39;:</code>.</p>
  225. </blockquote>
  226. <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&#39;t accept it at all).</p>
  227. <blockquote>
  228. <p>for WordPress requirements</p>
  229. </blockquote>
  230. <p>Are you saying that shared hostings won&#39;t move a muscle until WordPress forces them to by moving the bar higher?<br>
  231. Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.</p>
  232. <blockquote>
  233. <p>Would we avoid using a MySQL 8.0 feature?</p>
  234. </blockquote>
  235. <p>I need <code>WITH</code> here at least to improve performance of the heavily used method <code>multiGet</code>.</p>
  236. </div>
  237. <div class="raw-content hide">&gt; This commit requires a MySQL 8.0 feature JSON_TABLE
  238. Just for clarity, it is planned to be added in MariaDB 10.6. I&#39;ll change the version condition when that is a certainty.
  239. &gt; But next WITH and VALUES clauses also require MySQL 8.0
  240. ```WITH``` is available since MariaDB 10.2, ```VALUES``` – since MariaDB 10.3.
  241. In Oracle MySQL they are indeed only present starting with MySQL 8.0.
  242. &gt; So I will try fixing this by moving ```case &#39;mysql&#39;:``` to below ```case &#39;mariadb&#39;:```.
  243. 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&#39;t accept it at all).
  244. &gt; for WordPress requirements
  245. Are you saying that shared hostings won&#39;t move a muscle until WordPress forces them to by moving the bar higher?
  246. Because MySQL 5.7 is increasingly becoming more and more of an antique by the year.
  247. &gt; Would we avoid using a MySQL 8.0 feature?
  248. I need ```WITH``` here at least to improve performance of the heavily used method ```multiGet```.</div>
  249. <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>
  250. </div>
  251. </div>
  252. </div>
  253. <div class="comment" id="issuecomment-20949">
  254. <a class="avatar" href="/senooken">
  255. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  256. </a>
  257. <div class="content">
  258. <div class="ui top attached header">
  259. <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>
  260. <div class="ui right actions">
  261. <div class="item tag">
  262. Poster
  263. </div>
  264. </div>
  265. </div>
  266. <div class="ui attached segment">
  267. <div class="render-content markdown has-emoji">
  268. <blockquote>
  269. <p>I need WITH here at least to improve performance of the heavily used method multiGet.</p>
  270. </blockquote>
  271. <p>OK. Performance is important. And Thanks for telling me to differ logic for MariaDB and MySQL query.</p>
  272. <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>
  273. <blockquote>
  274. <p>Are you saying that shared hostings won&#39;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>
  275. </blockquote>
  276. <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>
  277. <p>EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.</p>
  278. <p>Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.</p>
  279. <p>In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?</p>
  280. <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>
  281. <p>If it is important for using latest DB feature, would we prepare for non latest DB logic?</p>
  282. <p>For example, prepare <code>$config[&#39;db&#39;][&#39;version&#39;]</code> item in <code>config.php</code>. Then if <code>$config[&#39;db&#39;][&#39;version&#39;]</code> is specified and version is not latest, run for compatible SQL by if statement.</p>
  283. <p>This gives choice to user to use GNU social on running old (cheap) shared web hosting.</p>
  284. </div>
  285. <div class="raw-content hide">&gt; I need WITH here at least to improve performance of the heavily used method multiGet.
  286. OK. Performance is important. And Thanks for telling me to differ logic for MariaDB and MySQL query.
  287. 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.
  288. &gt; Are you saying that shared hostings won&#39;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.
  289. Here is Oracle MySQL support policy (p. 21) (http://www.oracle.com/us/support/library/lifetime-support-technology-069183.pdf).
  290. EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.
  291. Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.
  292. In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?
  293. 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.
  294. If it is important for using latest DB feature, would we prepare for non latest DB logic?
  295. For example, prepare `$config[&#39;db&#39;][&#39;version&#39;]` item in `config.php`. Then if `$config[&#39;db&#39;][&#39;version&#39;]` is specified and version is not latest, run for compatible SQL by if statement.
  296. This gives choice to user to use GNU social on running old (cheap) shared web hosting.</div>
  297. <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>
  298. </div>
  299. </div>
  300. </div>
  301. <div class="comment" id="issuecomment-20950">
  302. <a class="avatar" href="/senooken">
  303. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  304. </a>
  305. <div class="content">
  306. <div class="ui top attached header">
  307. <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>
  308. <div class="ui right actions">
  309. <div class="item tag">
  310. Poster
  311. </div>
  312. </div>
  313. </div>
  314. <div class="ui attached segment">
  315. <div class="render-content markdown has-emoji">
  316. <p>It seems uploading feature is not work in NotABug.org.... So here is my patch.</p>
  317. <pre><code>diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
  318. index 0d22eb8628..adce5f6a88 100644
  319. --- a/classes/Memcached_DataObject.php
  320. +++ b/classes/Memcached_DataObject.php
  321. @@ -163,17 +163,27 @@ class Memcached_DataObject extends Safe_DataObject
  322. break;
  323. case &#39;mysql&#39;:
  324. default:
  325. + // Delivers an empty set
  326. + if (count($vals_escaped) == 0) {
  327. + $vals_escaped[] = &#39;NULL&#39;;
  328. + }
  329. + $subquery = &#34;&#34;;
  330. + foreach ($vals_escaped as $i =&gt; $val) {
  331. + if ($i == 0) {
  332. + $subquery = &#34;SELECT ${val} AS ${keyCol}, ${i} AS ${keyCol}_pos&#34; ;
  333. + } else {
  334. + $subquery .= &#34; UNION ALL SELECT ${val}, ${i}&#34;;
  335. + }
  336. + }
  337. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  338. &lt;&lt;&lt;END
  339. - RIGHT JOIN JSON_TABLE(
  340. - JSON_ARRAY(%s), &#39;$[*]&#39; COLUMNS (
  341. - {$keyCol} {$vals_cast_type} PATH &#39;$&#39;,
  342. - {$keyCol}_pos FOR ORDINALITY
  343. - )
  344. + RIGHT JOIN (
  345. + %s
  346. ) AS {$join_tablename} USING ({$keyCol})
  347. END,
  348. - implode(&#39;,&#39;, $vals_escaped)
  349. + $subquery
  350. );
  351. + break;
  352. }
  353. // Filters both NULLs requested and non-matching NULLs
  354. </code></pre>
  355. </div>
  356. <div class="raw-content hide">It seems uploading feature is not work in NotABug.org.... So here is my patch.
  357. ```
  358. diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
  359. index 0d22eb8628..adce5f6a88 100644
  360. --- a/classes/Memcached_DataObject.php
  361. &#43;&#43;&#43; b/classes/Memcached_DataObject.php
  362. @@ -163,17 &#43;163,27 @@ class Memcached_DataObject extends Safe_DataObject
  363. break;
  364. case &#39;mysql&#39;:
  365. default:
  366. &#43; // Delivers an empty set
  367. &#43; if (count($vals_escaped) == 0) {
  368. &#43; $vals_escaped[] = &#39;NULL&#39;;
  369. &#43; }
  370. &#43; $subquery = &#34;&#34;;
  371. &#43; foreach ($vals_escaped as $i =&gt; $val) {
  372. &#43; if ($i == 0) {
  373. &#43; $subquery = &#34;SELECT ${val} AS ${keyCol}, ${i} AS ${keyCol}_pos&#34; ;
  374. &#43; } else {
  375. &#43; $subquery .= &#34; UNION ALL SELECT ${val}, ${i}&#34;;
  376. &#43; }
  377. &#43; }
  378. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  379. &lt;&lt;&lt;END
  380. - RIGHT JOIN JSON_TABLE(
  381. - JSON_ARRAY(%s), &#39;$[*]&#39; COLUMNS (
  382. - {$keyCol} {$vals_cast_type} PATH &#39;$&#39;,
  383. - {$keyCol}_pos FOR ORDINALITY
  384. - )
  385. &#43; RIGHT JOIN (
  386. &#43; %s
  387. ) AS {$join_tablename} USING ({$keyCol})
  388. END,
  389. - implode(&#39;,&#39;, $vals_escaped)
  390. &#43; $subquery
  391. );
  392. &#43; break;
  393. }
  394. // Filters both NULLs requested and non-matching NULLs
  395. ```</div>
  396. <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>
  397. </div>
  398. </div>
  399. </div>
  400. <div class="comment" id="issuecomment-20952">
  401. <a class="avatar" href="/XRevan86">
  402. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  403. </a>
  404. <div class="content">
  405. <div class="ui top attached header">
  406. <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>
  407. <div class="ui right actions">
  408. <div class="item tag">
  409. Collaborator
  410. </div>
  411. </div>
  412. </div>
  413. <div class="ui attached segment">
  414. <div class="render-content markdown has-emoji">
  415. <blockquote>
  416. <p>EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.</p>
  417. </blockquote>
  418. <p>EOL for CentOS 7 = Jun 2024, CentOS 6 = Nov 2020.<br>
  419. So they have very long support periods. Doesn&#39;t mean anyone should continue using them with a clear conscience.</p>
  420. <blockquote>
  421. <p>Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.</p>
  422. </blockquote>
  423. <p>WordPress supports the latest MariaDB and Oracle MySQL fine, it&#39;s not against WordPress requirements to use something not ancient.</p>
  424. <blockquote>
  425. <p>WordPress also works with PHP 5.6.20+ and MySQL 5.0+</p>
  426. </blockquote>
  427. <p>And they also write this. And latest GNU social won&#39;t work on PHP 5.6 and MySQL 5.0, that&#39;s just how it is.</p>
  428. <blockquote>
  429. <p>In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?</p>
  430. </blockquote>
  431. <p>Admittedly, I am no expert on shared hosting providers.<br>
  432. And I should point out that Oracle MySQL 8.0 is not officially supported by GNU social.<br>
  433. The currently supported DBMS are: PostgreSQL 11+ and MariaDB 10.3+.</p>
  434. <p>I looked around the shared hosting provider of your choice, GMO DigiRock, and couldn&#39;t even find evidence of Oracle MySQL 5.7 there. They don&#39;t disclose their offerings much.<br>
  435. I do see that they have PHP 7.4 though, so I don&#39;t know why you picked PHP 7.3.<br>
  436. GNU social requires PHP 7.3+, it&#39;s not the maximum, it&#39;s the minimum. Same with WordPress, really.</p>
  437. <p>Either way, I&#39;m sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7.<br>
  438. 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>
  439. <p>Fixed up your patch:</p>
  440. <pre><code class="language-diff">--- a/classes/Memcached_DataObject.php
  441. +++ b/classes/Memcached_DataObject.php
  442. @@ -100,9 +100,18 @@ class Memcached_DataObject extends Safe_DataObject
  443. $db_type = common_config(&#39;db&#39;, &#39;type&#39;);
  444. if ($db_type === &#39;mysql&#39;) {
  445. $tmp_obj = new $cls();
  446. - $tmp_obj-&gt;query(&#39;SELECT 0 /*M! + 1 */ AS is_mariadb;&#39;);
  447. - if ($tmp_obj-&gt;fetch() &amp;&amp; $tmp_obj-&gt;is_mariadb) {
  448. - $db_type = &#39;mariadb&#39;;
  449. + $tmp_obj-&gt;query(
  450. + &lt;&lt;&lt;&#39;END&#39;
  451. + SELECT (0 /*M! + 1 */) &lt;&gt; 0 AS is_mariadb,
  452. + (0 /*!80004 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
  453. + END
  454. + );
  455. + if ($tmp_obj-&gt;fetch()) {
  456. + if ($tmp_obj-&gt;is_old_mysql) {
  457. + $db_type = &#39;old_mysql&#39;;
  458. + } elseif ($tmp_obj-&gt;is_mariadb) {
  459. + $db_type = &#39;mariadb&#39;;
  460. + }
  461. }
  462. }
  463. @@ -116,11 +125,17 @@ class Memcached_DataObject extends Safe_DataObject
  464. } else {
  465. $val_escaped = &#34;&#39;{$obj-&gt;escape($val)}&#39;&#34;;
  466. }
  467. - if ($db_type !== &#39;mariadb&#39;) {
  468. - $vals_escaped[] = $val_escaped;
  469. - } else {
  470. - // A completely different approach for MariaDB (see below)
  471. + if ($db_type === &#39;mariadb&#39;) {
  472. $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  473. + } elseif ($db_type === &#39;old_mysql&#39;) {
  474. + if ($i == 0) {
  475. + $vals_escaped[] = &#34;SELECT {$val_escaped} AS {$keyCol}, &#34;
  476. + . &#34;{$i} AS {$keyCol}_pos&#34;;
  477. + } else {
  478. + $vals_escaped[] = &#34;SELECT {$val_escaped},{$i}&#34;;
  479. + }
  480. + } else {
  481. + $vals_escaped[] = $val_escaped;
  482. }
  483. }
  484. @@ -164,6 +179,19 @@ class Memcached_DataObject extends Safe_DataObject
  485. implode(&#39;,&#39;, $vals_escaped)
  486. );
  487. break;
  488. + case &#39;old_mysql&#39;:
  489. + // Delivers an empty set
  490. + if (count($vals_escaped) == 0) {
  491. + $vals_escaped[] = &#34;SELECT NULL AS {$keyCol}, &#34;
  492. + . &#34;0 AS {$keyCol}_pos LIMIT 0&#34;;
  493. + }
  494. + $obj-&gt;_join = &#34;\n&#34; . sprintf(
  495. + &#34;{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  496. + implode(&#39; UNION ALL &#39;, $vals_escaped)
  497. + );
  498. + break;
  499. case &#39;mysql&#39;:
  500. default:
  501. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  502. </code></pre>
  503. <p>But the problem with that approach is that it&#39;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>
  504. </div>
  505. <div class="raw-content hide">&gt; EOL of MySQL 5.7 = Oct 2023, 5.6=Feb 2021.
  506. EOL for CentOS 7 = Jun 2024, CentOS 6 = Nov 2020.
  507. So they have very long support periods. Doesn&#39;t mean anyone should continue using them with a clear conscience.
  508. &gt; Many shared hosting is based on WordPress requirements. And WordPress requirements is based on vendor EOL.
  509. WordPress supports the latest MariaDB and Oracle MySQL fine, it&#39;s not against WordPress requirements to use something not ancient.
  510. &gt; WordPress also works with PHP 5.6.20&#43; and MySQL 5.0&#43;
  511. And they also write this. And latest GNU social won&#39;t work on PHP 5.6 and MySQL 5.0, that&#39;s just how it is.
  512. &gt; In Japan, there is no shared hosting for supporting MySQL 8.0. Do you know shared hosting for supporting MySQL 8.0?
  513. Admittedly, I am no expert on shared hosting providers.
  514. And I should point out that Oracle MySQL 8.0 is not officially supported by GNU social.
  515. The currently supported DBMS are: PostgreSQL 11&#43; and MariaDB 10.3&#43;.
  516. I looked around the shared hosting provider of your choice, GMO DigiRock, and couldn&#39;t even find evidence of Oracle MySQL 5.7 there. They don&#39;t disclose their offerings much.
  517. I do see that they have PHP 7.4 though, so I don&#39;t know why you picked PHP 7.3.
  518. GNU social requires PHP 7.3&#43;, it&#39;s not the maximum, it&#39;s the minimum. Same with WordPress, really.
  519. Either way, I&#39;m sure there are plenty of shared hostings that do provide something newer than Oracle MySQL 5.7.
  520. There is this page: [Web Hosting Providers Offering MariaDB](https://mariadb.com/kb/en/web-hosting-providers-offering-mariadb/) for one thing.
  521. Fixed up your patch:
  522. ```diff
  523. --- a/classes/Memcached_DataObject.php
  524. &#43;&#43;&#43; b/classes/Memcached_DataObject.php
  525. @@ -100,9 &#43;100,18 @@ class Memcached_DataObject extends Safe_DataObject
  526. $db_type = common_config(&#39;db&#39;, &#39;type&#39;);
  527. if ($db_type === &#39;mysql&#39;) {
  528. $tmp_obj = new $cls();
  529. - $tmp_obj-&gt;query(&#39;SELECT 0 /*M! &#43; 1 */ AS is_mariadb;&#39;);
  530. - if ($tmp_obj-&gt;fetch() &amp;&amp; $tmp_obj-&gt;is_mariadb) {
  531. - $db_type = &#39;mariadb&#39;;
  532. &#43; $tmp_obj-&gt;query(
  533. &#43; &lt;&lt;&lt;&#39;END&#39;
  534. &#43; SELECT (0 /*M! &#43; 1 */) &lt;&gt; 0 AS is_mariadb,
  535. &#43; (0 /*!80004 &#43; 1 */ /*M!100303 &#43; 1 */) = 0 AS is_old_mysql;
  536. &#43; END
  537. &#43; );
  538. &#43; if ($tmp_obj-&gt;fetch()) {
  539. &#43; if ($tmp_obj-&gt;is_old_mysql) {
  540. &#43; $db_type = &#39;old_mysql&#39;;
  541. &#43; } elseif ($tmp_obj-&gt;is_mariadb) {
  542. &#43; $db_type = &#39;mariadb&#39;;
  543. &#43; }
  544. }
  545. }
  546. @@ -116,11 &#43;125,17 @@ class Memcached_DataObject extends Safe_DataObject
  547. } else {
  548. $val_escaped = &#34;&#39;{$obj-&gt;escape($val)}&#39;&#34;;
  549. }
  550. - if ($db_type !== &#39;mariadb&#39;) {
  551. - $vals_escaped[] = $val_escaped;
  552. - } else {
  553. - // A completely different approach for MariaDB (see below)
  554. &#43; if ($db_type === &#39;mariadb&#39;) {
  555. $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  556. &#43; } elseif ($db_type === &#39;old_mysql&#39;) {
  557. &#43; if ($i == 0) {
  558. &#43; $vals_escaped[] = &#34;SELECT {$val_escaped} AS {$keyCol}, &#34;
  559. &#43; . &#34;{$i} AS {$keyCol}_pos&#34;;
  560. &#43; } else {
  561. &#43; $vals_escaped[] = &#34;SELECT {$val_escaped},{$i}&#34;;
  562. &#43; }
  563. &#43; } else {
  564. &#43; $vals_escaped[] = $val_escaped;
  565. }
  566. }
  567. @@ -164,6 &#43;179,19 @@ class Memcached_DataObject extends Safe_DataObject
  568. implode(&#39;,&#39;, $vals_escaped)
  569. );
  570. break;
  571. &#43; case &#39;old_mysql&#39;:
  572. &#43; // Delivers an empty set
  573. &#43; if (count($vals_escaped) == 0) {
  574. &#43; $vals_escaped[] = &#34;SELECT NULL AS {$keyCol}, &#34;
  575. &#43; . &#34;0 AS {$keyCol}_pos LIMIT 0&#34;;
  576. &#43; }
  577. &#43; $obj-&gt;_join = &#34;\n&#34; . sprintf(
  578. &#43; &#34;{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  579. &#43; implode(&#39; UNION ALL &#39;, $vals_escaped)
  580. &#43; );
  581. &#43; break;
  582. case &#39;mysql&#39;:
  583. default:
  584. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  585. ```
  586. But the problem with that approach is that it&#39;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>
  587. <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>
  588. </div>
  589. </div>
  590. </div>
  591. <div class="comment" id="issuecomment-20957">
  592. <a class="avatar" href="/senooken">
  593. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  594. </a>
  595. <div class="content">
  596. <div class="ui top attached header">
  597. <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>
  598. <div class="ui right actions">
  599. <div class="item tag">
  600. Poster
  601. </div>
  602. </div>
  603. </div>
  604. <div class="ui attached segment">
  605. <div class="render-content markdown has-emoji">
  606. <blockquote>
  607. <p>WordPress supports the latest MariaDB and Oracle MySQL fine, it&#39;s not against WordPress requirements to use something not ancient.</p>
  608. </blockquote>
  609. <p>You are right. But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.</p>
  610. <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>
  611. <p>I selected PHP 7.3 for more stability than PHP 7.4.</p>
  612. <blockquote>
  613. <p>Either way, I&#39;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>
  614. </blockquote>
  615. <p>Thanks for information. I saw MariaDB global supporting provider in first time.</p>
  616. <p>MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.</p>
  617. <p>GNU social v1.x supports MariaDB 5+, so I wish keep compatibility for non latest DB...</p>
  618. <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>
  619. <p>I am satisfied with your fixed up code for supporting MySQL 5.7 anyway. Thanks!</p>
  620. <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>
  621. <p>I will try rewriting more better SQL with <code>JSON_ARRAY</code>. Please wait some days.</p>
  622. </div>
  623. <div class="raw-content hide">&gt; WordPress supports the latest MariaDB and Oracle MySQL fine, it&#39;s not against WordPress requirements to use something not ancient.
  624. You are right. But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.
  625. 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.
  626. I selected PHP 7.3 for more stability than PHP 7.4.
  627. &gt; Either way, I&#39;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.
  628. Thanks for information. I saw MariaDB global supporting provider in first time.
  629. MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.
  630. GNU social v1.x supports MariaDB 5&#43;, so I wish keep compatibility for non latest DB...
  631. 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.
  632. I am satisfied with your fixed up code for supporting MySQL 5.7 anyway. Thanks!
  633. MySQL 5.7 does not support `JSON_TABLE` but supports [`JSON_ARRAY`](https://dev.mysql.com/doc/refman/5.7/en/json.html).
  634. I will try rewriting more better SQL with `JSON_ARRAY`. Please wait some days.</div>
  635. <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>
  636. </div>
  637. </div>
  638. </div>
  639. <div class="comment" id="issuecomment-20958">
  640. <a class="avatar" href="/XRevan86">
  641. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  642. </a>
  643. <div class="content">
  644. <div class="ui top attached header">
  645. <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>
  646. <div class="ui right actions">
  647. <div class="item tag">
  648. Collaborator
  649. </div>
  650. </div>
  651. </div>
  652. <div class="ui attached segment">
  653. <div class="render-content markdown has-emoji">
  654. <blockquote>
  655. <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>
  656. </blockquote>
  657. <p>Didn&#39;t see that page…<br>
  658. &#34;sqlight&#34; is an interesting option to have :-). So is &#34;python 2/3&#34; with no specifics.</p>
  659. <blockquote>
  660. <p>They support MySQL 5.7 and PostgreSQL 9.6.</p>
  661. </blockquote>
  662. <p>Oof, well, at least not PostgreSQL 9.2 as their other resources claim.</p>
  663. <blockquote>
  664. <p>I selected PHP 7.3 for more stability than PHP 7.4.</p>
  665. </blockquote>
  666. <p>Really doesn&#39;t matter unless there are some issues specific to the shared hosting.</p>
  667. <blockquote>
  668. <p>MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.</p>
  669. </blockquote>
  670. <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>
  671. <blockquote>
  672. <p>But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.</p>
  673. </blockquote>
  674. <p>It&#39;s like they don&#39;t want their customers to have the best coverage possible, seems self-defeating.</p>
  675. <blockquote>
  676. <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>
  677. I will try rewriting more better SQL with <code>JSON_ARRAY</code>. Please wait some days.</p>
  678. </blockquote>
  679. <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>
  680. And won&#39;t be able to return exactly the tuples in order and amount requested, duplicates or not. But I added that just because it&#39;s easy with how it&#39;s done now, that can be removed, not that important.</p>
  681. </div>
  682. <div class="raw-content hide">&gt; My shared hosting provider GMO DigiRock (CORESERVER) show them spec in here (https://www.coreserver.jp/spec/).
  683. Didn&#39;t see that page…
  684. &#34;sqlight&#34; is an interesting option to have :-). So is &#34;python 2/3&#34; with no specifics.
  685. &gt; They support MySQL 5.7 and PostgreSQL 9.6.
  686. Oof, well, at least not PostgreSQL 9.2 as their other resources claim.
  687. &gt; I selected PHP 7.3 for more stability than PHP 7.4.
  688. Really doesn&#39;t matter unless there are some issues specific to the shared hosting.
  689. &gt; MariaDB is forked from MySQL 5.5. And non latest version, MySQL and MariaDB is high compatible.
  690. 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.
  691. &gt; But WordPress support non latest DB, so shared hosting providers may use non latest DB for their convinience.
  692. It&#39;s like they don&#39;t want their customers to have the best coverage possible, seems self-defeating.
  693. &gt; MySQL 5.7 does not support ```JSON_TABLE``` but supports [```JSON_ARRAY```](https://dev.mysql.com/doc/refman/5.7/en/json.html).
  694. &gt; I will try rewriting more better SQL with ```JSON_ARRAY```. Please wait some days.
  695. ```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.
  696. And won&#39;t be able to return exactly the tuples in order and amount requested, duplicates or not. But I added that just because it&#39;s easy with how it&#39;s done now, that can be removed, not that important.</div>
  697. <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>
  698. </div>
  699. </div>
  700. </div>
  701. <div class="comment" id="issuecomment-20959">
  702. <a class="avatar" href="/senooken">
  703. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  704. </a>
  705. <div class="content">
  706. <div class="ui top attached header">
  707. <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>
  708. <div class="ui right actions">
  709. <div class="item tag">
  710. Poster
  711. </div>
  712. </div>
  713. </div>
  714. <div class="ui attached segment">
  715. <div class="render-content markdown has-emoji">
  716. <p>Hi. I tried using <code>JSON_ARRAY</code>, but I gave up.</p>
  717. <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>
  718. <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>
  719. <pre><code class="language-diff">+ $obj-&gt;_join = &#34;\n&#34; . sprintf(
  720. + &#34;{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  721. + implode(&#39; UNION ALL &#39;, $vals_escaped)
  722. </code></pre>
  723. <p>After fix this bug, please commit it and close this issue.</p>
  724. <p>Anyway, If it works on MySQL 5.7, there is no problem. Thanks!</p>
  725. </div>
  726. <div class="raw-content hide">Hi. I tried using `JSON_ARRAY`, but I gave up.
  727. 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.
  728. 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.
  729. ``` diff
  730. &#43; $obj-&gt;_join = &#34;\n&#34; . sprintf(
  731. &#43; &#34;{$join_keyword} (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  732. &#43; implode(&#39; UNION ALL &#39;, $vals_escaped)
  733. ```
  734. After fix this bug, please commit it and close this issue.
  735. Anyway, If it works on MySQL 5.7, there is no problem. Thanks!</div>
  736. <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>
  737. </div>
  738. </div>
  739. </div>
  740. <div class="comment" id="issuecomment-20965">
  741. <a class="avatar" href="/XRevan86">
  742. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  743. </a>
  744. <div class="content">
  745. <div class="ui top attached header">
  746. <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>
  747. <div class="ui right actions">
  748. <div class="item tag">
  749. Collaborator
  750. </div>
  751. </div>
  752. </div>
  753. <div class="ui attached segment">
  754. <div class="render-content markdown has-emoji">
  755. <p>Pushed a test commit, please, try.</p>
  756. </div>
  757. <div class="raw-content hide">Pushed a test commit, please, try.</div>
  758. <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>
  759. </div>
  760. </div>
  761. </div>
  762. <div class="event">
  763. <span class="octicon octicon-circle-slash"></span>
  764. <a class="ui avatar image" href="/XRevan86">
  765. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  766. </a>
  767. <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>
  768. </div>
  769. <div class="comment" id="issuecomment-20981">
  770. <a class="avatar" href="/senooken">
  771. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  772. </a>
  773. <div class="content">
  774. <div class="ui top attached header">
  775. <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>
  776. <div class="ui right actions">
  777. <div class="item tag">
  778. Poster
  779. </div>
  780. </div>
  781. </div>
  782. <div class="ui attached segment">
  783. <div class="render-content markdown has-emoji">
  784. <p><a href="/Xrevan86." rel="nofollow">@Xrevan86.</a> Thanks for commit. I checked your commit (4290ec312). MySQL 5.7 works well anyway.</p>
  785. <p>But after this commit, my home time line needs <strong>some minutes</strong> for finishing page rendering. It is too slowly.</p>
  786. <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>
  787. <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>
  788. <p>Also if there is no problem, difference is OK.</p>
  789. <p>Your commit use some JSON functions. Is JSON functions heavy?</p>
  790. <p>I was satisfied with your last patch. Why did you change commit from last patch?</p>
  791. <p>If there is no problem, it is all OK how implementation.</p>
  792. </div>
  793. <div class="raw-content hide">@Xrevan86. Thanks for commit. I checked your commit (4290ec312). MySQL 5.7 works well anyway.
  794. But after this commit, my home time line needs **some minutes** for finishing page rendering. It is too slowly.
  795. Previous [commit](https://notabug.org/diogo/gnu-social/commit/08145f635f8cf856fd66d9e29281b0c8ca3390a2) &#43; your last patch (with fixed bug in this issue) is OK (I checked).
  796. But your commit (4290ec3120b4468093a446653ac3fd8147ec734e) is a quite different and too many volume from this patch.
  797. Also if there is no problem, difference is OK.
  798. Your commit use some JSON functions. Is JSON functions heavy?
  799. I was satisfied with your last patch. Why did you change commit from last patch?
  800. If there is no problem, it is all OK how implementation.</div>
  801. <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>
  802. </div>
  803. </div>
  804. </div>
  805. <div class="event">
  806. <span class="octicon octicon-primitive-dot"></span>
  807. <a class="ui avatar image" href="/senooken">
  808. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  809. </a>
  810. <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>
  811. </div>
  812. <div class="comment" id="issuecomment-20984">
  813. <a class="avatar" href="/XRevan86">
  814. <img src="https://seccdn.libravatar.org/avatar/be64a3cf684f74eecd530b6d69cde332">
  815. </a>
  816. <div class="content">
  817. <div class="ui top attached header">
  818. <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>
  819. <div class="ui right actions">
  820. <div class="item tag">
  821. Collaborator
  822. </div>
  823. </div>
  824. </div>
  825. <div class="ui attached segment">
  826. <div class="render-content markdown has-emoji">
  827. <blockquote>
  828. <p>Your commit uses some JSON functions. Are JSON functions heavy?</p>
  829. </blockquote>
  830. <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&#39;s failing miserably.</p>
  831. </div>
  832. <div class="raw-content hide">&gt; Your commit uses some JSON functions. Are JSON functions heavy?
  833. @senooken, yes and no. Because ```json_search``` can only work with strings, I tried casting every integer, which is probably the bit that&#39;s failing miserably.</div>
  834. <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>
  835. </div>
  836. </div>
  837. </div>
  838. <div class="comment" id="issuecomment-21021">
  839. <a class="avatar" href="/senooken">
  840. <img src="https://seccdn.libravatar.org/avatar/5349e716212163fd511dfe106ff42e0a">
  841. </a>
  842. <div class="content">
  843. <div class="ui top attached header">
  844. <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>
  845. <div class="ui right actions">
  846. <div class="item tag">
  847. Poster
  848. </div>
  849. </div>
  850. </div>
  851. <div class="ui attached segment">
  852. <div class="render-content markdown has-emoji">
  853. <p>After your comment, it seems your commit (4290ec3120) was dropped out from commit history.</p>
  854. <p>What did you think about this commit?</p>
  855. <p>I think your last patch is OK ever last commit (adc689cb15). I want to include this patch.</p>
  856. <p>Is there a problem? To make sure I show this patch again in following.</p>
  857. <p>This patch can be imported to run <code>patch -p 1 &lt;[patch-file-name]</code> command in root directory (I think you know...).</p>
  858. <pre><code class="language-diff">diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
  859. index 0d22eb8628..d71afed57c 100644
  860. --- a/classes/Memcached_DataObject.php
  861. +++ b/classes/Memcached_DataObject.php
  862. @@ -98,9 +98,18 @@ class Memcached_DataObject extends Safe_DataObject
  863. $db_type = common_config(&#39;db&#39;, &#39;type&#39;);
  864. if ($db_type === &#39;mysql&#39;) {
  865. $tmp_obj = new $cls();
  866. - $tmp_obj-&gt;query(&#39;SELECT 0 /*M! + 1 */ AS is_mariadb;&#39;);
  867. - if ($tmp_obj-&gt;fetch() &amp;&amp; $tmp_obj-&gt;is_mariadb) {
  868. - $db_type = &#39;mariadb&#39;;
  869. + $tmp_obj-&gt;query(
  870. + &lt;&lt;&lt;&#39;END&#39;
  871. + SELECT 0 /*M! + 1 */ AS is_mariadb,
  872. + (0 /*!80001 + 1 */ /*M!100303 + 1 */) = 0 AS is_old_mysql;
  873. + END
  874. + );
  875. + if ($tmp_obj-&gt;fetch()) {
  876. + if ($tmp_obj-&gt;is_old_mysql) {
  877. + $db_type = &#39;old_mysql&#39;;
  878. + } elseif ($tmp_obj-&gt;is_mariadb) {
  879. + $db_type = &#39;mariadb&#39;;
  880. + }
  881. }
  882. }
  883. @@ -114,11 +123,17 @@ class Memcached_DataObject extends Safe_DataObject
  884. } else {
  885. $val_escaped = &#34;&#39;{$obj-&gt;escape($val)}&#39;&#34;;
  886. }
  887. - if ($db_type !== &#39;mariadb&#39;) {
  888. - $vals_escaped[] = $val_escaped;
  889. + if ($db_type === &#39;mariadb&#39;) {
  890. + $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  891. + } elseif ($db_type === &#39;old_mysql&#39;) {
  892. + if ($i == 0) {
  893. + $vals_escaped[] = &#34;SELECT {$val_escaped} AS {$keyCol}, &#34;
  894. + . &#34;{$i} AS {$keyCol}_pos&#34;;
  895. + } else {
  896. + $vals_escaped[] = &#34;SELECT {$val_escaped},{$i}&#34;;
  897. + }
  898. } else {
  899. - // A completely different approach for MariaDB (see below)
  900. - $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  901. + $vals_escaped[] = $val_escaped;
  902. }
  903. }
  904. @@ -161,6 +176,17 @@ class Memcached_DataObject extends Safe_DataObject
  905. implode(&#39;,&#39;, $vals_escaped)
  906. );
  907. break;
  908. + case &#39;old_mysql&#39;:
  909. + // Delivers an empty set
  910. + if (count($vals_escaped) == 0) {
  911. + $vals_escaped[] = &#34;SELECT NULL AS {$keyCol}, &#34;
  912. + . &#34;0 AS {$keyCol}_pos LIMIT 0&#34;;
  913. + }
  914. + $obj-&gt;_join = &#34;\n&#34; . sprintf(
  915. + &#34;RIGHT JOJIN (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  916. + implode(&#39; UNION ALL &#39;, $vals_escaped)
  917. + );
  918. + break;
  919. case &#39;mysql&#39;:
  920. default:
  921. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  922. </code></pre>
  923. </div>
  924. <div class="raw-content hide">After your comment, it seems your commit (4290ec3120) was dropped out from commit history.
  925. What did you think about this commit?
  926. I think your last patch is OK ever last commit (adc689cb15). I want to include this patch.
  927. Is there a problem? To make sure I show this patch again in following.
  928. This patch can be imported to run `patch -p 1 &lt;[patch-file-name]` command in root directory (I think you know...).
  929. ``` diff
  930. diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
  931. index 0d22eb8628..d71afed57c 100644
  932. --- a/classes/Memcached_DataObject.php
  933. &#43;&#43;&#43; b/classes/Memcached_DataObject.php
  934. @@ -98,9 &#43;98,18 @@ class Memcached_DataObject extends Safe_DataObject
  935. $db_type = common_config(&#39;db&#39;, &#39;type&#39;);
  936. if ($db_type === &#39;mysql&#39;) {
  937. $tmp_obj = new $cls();
  938. - $tmp_obj-&gt;query(&#39;SELECT 0 /*M! &#43; 1 */ AS is_mariadb;&#39;);
  939. - if ($tmp_obj-&gt;fetch() &amp;&amp; $tmp_obj-&gt;is_mariadb) {
  940. - $db_type = &#39;mariadb&#39;;
  941. &#43; $tmp_obj-&gt;query(
  942. &#43; &lt;&lt;&lt;&#39;END&#39;
  943. &#43; SELECT 0 /*M! &#43; 1 */ AS is_mariadb,
  944. &#43; (0 /*!80001 &#43; 1 */ /*M!100303 &#43; 1 */) = 0 AS is_old_mysql;
  945. &#43; END
  946. &#43; );
  947. &#43; if ($tmp_obj-&gt;fetch()) {
  948. &#43; if ($tmp_obj-&gt;is_old_mysql) {
  949. &#43; $db_type = &#39;old_mysql&#39;;
  950. &#43; } elseif ($tmp_obj-&gt;is_mariadb) {
  951. &#43; $db_type = &#39;mariadb&#39;;
  952. &#43; }
  953. }
  954. }
  955. @@ -114,11 &#43;123,17 @@ class Memcached_DataObject extends Safe_DataObject
  956. } else {
  957. $val_escaped = &#34;&#39;{$obj-&gt;escape($val)}&#39;&#34;;
  958. }
  959. - if ($db_type !== &#39;mariadb&#39;) {
  960. - $vals_escaped[] = $val_escaped;
  961. &#43; if ($db_type === &#39;mariadb&#39;) {
  962. &#43; $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  963. &#43; } elseif ($db_type === &#39;old_mysql&#39;) {
  964. &#43; if ($i == 0) {
  965. &#43; $vals_escaped[] = &#34;SELECT {$val_escaped} AS {$keyCol}, &#34;
  966. &#43; . &#34;{$i} AS {$keyCol}_pos&#34;;
  967. &#43; } else {
  968. &#43; $vals_escaped[] = &#34;SELECT {$val_escaped},{$i}&#34;;
  969. &#43; }
  970. } else {
  971. - // A completely different approach for MariaDB (see below)
  972. - $vals_escaped[] = &#34;({$val_escaped},{$i})&#34;;
  973. &#43; $vals_escaped[] = $val_escaped;
  974. }
  975. }
  976. @@ -161,6 &#43;176,17 @@ class Memcached_DataObject extends Safe_DataObject
  977. implode(&#39;,&#39;, $vals_escaped)
  978. );
  979. break;
  980. &#43; case &#39;old_mysql&#39;:
  981. &#43; // Delivers an empty set
  982. &#43; if (count($vals_escaped) == 0) {
  983. &#43; $vals_escaped[] = &#34;SELECT NULL AS {$keyCol}, &#34;
  984. &#43; . &#34;0 AS {$keyCol}_pos LIMIT 0&#34;;
  985. &#43; }
  986. &#43; $obj-&gt;_join = &#34;\n&#34; . sprintf(
  987. &#43; &#34;RIGHT JOJIN (%s) AS {$join_tablename} USING ({$keyCol})&#34;,
  988. &#43; implode(&#39; UNION ALL &#39;, $vals_escaped)
  989. &#43; );
  990. &#43; break;
  991. case &#39;mysql&#39;:
  992. default:
  993. $obj-&gt;_join = &#34;\n&#34; . sprintf(
  994. ```</div>
  995. <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>
  996. </div>
  997. </div>
  998. </div>
  999. <div class="ui warning message">
  1000. <a href="/user/login?redirect_to=/diogo/gnu-social/issues/206">Sign in</a> to join this conversation.
  1001. </div>
  1002. </ui>
  1003. </div>
  1004. <div class="four wide column">
  1005. <div class="ui segment metas">
  1006. <div class="ui disabled floating jump select-label dropdown">
  1007. <span class="text">
  1008. <strong>Labels</strong>
  1009. <span class="octicon octicon-gear"></span>
  1010. </span>
  1011. <div class="filter menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/label">
  1012. <div class="no-select item">Clear labels</div>
  1013. <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>
  1014. <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>
  1015. <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>
  1016. <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>
  1017. <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>
  1018. <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>
  1019. <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>
  1020. <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>
  1021. <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>
  1022. <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>
  1023. </div>
  1024. </div>
  1025. <div class="ui labels list">
  1026. <span class="no-select item ">No Label</span>
  1027. <div class="item">
  1028. <a class="ui label hide" id="label_1564" href="/diogo/gnu-social/issues?labels=1564" style="color: #000; background-color: #fbca04">bounty</a>
  1029. </div>
  1030. <div class="item">
  1031. <a class="ui label hide" id="label_1483" href="/diogo/gnu-social/issues?labels=1483" style="color: #fff; background-color: #ee0701">bug</a>
  1032. </div>
  1033. <div class="item">
  1034. <a class="ui label hide" id="label_1484" href="/diogo/gnu-social/issues?labels=1484" style="color: #000; background-color: #cccccc">duplicate</a>
  1035. </div>
  1036. <div class="item">
  1037. <a class="ui label hide" id="label_1485" href="/diogo/gnu-social/issues?labels=1485" style="color: #000; background-color: #84b6eb">enhancement</a>
  1038. </div>
  1039. <div class="item">
  1040. <a class="ui label hide" id="label_1486" href="/diogo/gnu-social/issues?labels=1486" style="color: #fff; background-color: #128a0c">help wanted</a>
  1041. </div>
  1042. <div class="item">
  1043. <a class="ui label hide" id="label_1487" href="/diogo/gnu-social/issues?labels=1487" style="color: #000; background-color: #e6e6e6">invalid</a>
  1044. </div>
  1045. <div class="item">
  1046. <a class="ui label hide" id="label_1488" href="/diogo/gnu-social/issues?labels=1488" style="color: #fff; background-color: #cc317c">question</a>
  1047. </div>
  1048. <div class="item">
  1049. <a class="ui label hide" id="label_1565" href="/diogo/gnu-social/issues?labels=1565" style="color: #000; background-color: #d4c5f9">RFC</a>
  1050. </div>
  1051. <div class="item">
  1052. <a class="ui label hide" id="label_1841" href="/diogo/gnu-social/issues?labels=1841" style="color: #fff; background-color: #0052cc">v3</a>
  1053. </div>
  1054. <div class="item">
  1055. <a class="ui label hide" id="label_1489" href="/diogo/gnu-social/issues?labels=1489" style="color: #000; background-color: #ffffff">wontfix</a>
  1056. </div>
  1057. </div>
  1058. <div class="ui divider"></div>
  1059. <div class="ui disabled floating jump select-milestone dropdown">
  1060. <span class="text">
  1061. <strong>Milestone</strong>
  1062. <span class="octicon octicon-gear"></span>
  1063. </span>
  1064. <div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/milestone">
  1065. <div class="no-select item">Clear milestone</div>
  1066. </div>
  1067. </div>
  1068. <div class="ui select-milestone list">
  1069. <span class="no-select item ">No Milestone</span>
  1070. <div class="selected">
  1071. </div>
  1072. </div>
  1073. <div class="ui divider"></div>
  1074. <input id="assignee_id" name="assignee_id" type="hidden" value="">
  1075. <div class="ui disabled floating jump select-assignee dropdown">
  1076. <span class="text">
  1077. <strong>Assignee</strong>
  1078. <span class="octicon octicon-gear"></span>
  1079. </span>
  1080. <div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/206/assignee">
  1081. <div class="no-select item">Clear assignee</div>
  1082. </div>
  1083. </div>
  1084. <div class="ui select-assignee list">
  1085. <span class="no-select item ">No assignee</span>
  1086. <div class="selected">
  1087. </div>
  1088. </div>
  1089. <div class="ui divider"></div>
  1090. <div class="ui participants">
  1091. <span class="text"><strong>2 Participants</strong></span>
  1092. <div>
  1093. <a href="/senooken">
  1094. <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">
  1095. </a>
  1096. <a href="/XRevan86">
  1097. <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">
  1098. </a>
  1099. </div>
  1100. </div>
  1101. </div>
  1102. </div>
  1103. </div>
  1104. <div class="hide" id="edit-content-form">
  1105. <div class="ui comment form">
  1106. <div class="ui top attached tabular menu">
  1107. <a class="active write item">Write</a>
  1108. <a class="preview item" data-url="/api/v1/markdown" data-context="/diogo/gnu-social">Preview</a>
  1109. </div>
  1110. <div class="ui bottom attached active write tab segment">
  1111. <textarea tabindex="1" id="content" name="content"></textarea>
  1112. </div>
  1113. <div class="ui bottom attached tab preview segment markdown">
  1114. Loading...
  1115. </div>
  1116. <div class="text right edit buttons">
  1117. <div class="ui basic blue cancel button" tabindex="3">Cancel</div>
  1118. <div class="ui green save button" tabindex="2">Save</div>
  1119. </div>
  1120. </div>
  1121. </div>
  1122. <div class="hide" id="no-content">
  1123. <span class="no-content">There is no content yet.</span>
  1124. </div>
  1125. </div>
  1126. </div>
  1127. </div>
  1128. </div>
  1129. <footer>
  1130. <div class="ui container">
  1131. <div class="ui left">
  1132. <a href="/tos">Terms of Service</a>
  1133. &bull;
  1134. <a href="/about">About us</a>
  1135. &bull;
  1136. <a href="/outages">Outages</a>
  1137. &bull;
  1138. <a href="/hp/gogs/issues">Report a problem</a>
  1139. &bull;
  1140. <a href="/assets/librejs/librejs.html" data-jslicense="1">Javascript licenses</a>
  1141. &bull;
  1142. <a href="/fingerprints">SSH Fingerprints</a>
  1143. </div>
  1144. <div class="ui right links">
  1145. <div class="ui language bottom floating slide up dropdown link item">
  1146. <i class="world icon"></i>
  1147. <div class="text">English</div>
  1148. <div class="menu">
  1149. <a class="item active selected" href="#">English</a>
  1150. <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-CN">简体中文</a>
  1151. <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-HK">繁體中文(香港)</a>
  1152. <a class="item " href="/diogo/gnu-social/issues/206?lang=zh-TW">繁體中文(臺灣)</a>
  1153. <a class="item " href="/diogo/gnu-social/issues/206?lang=de-DE">Deutsch</a>
  1154. <a class="item " href="/diogo/gnu-social/issues/206?lang=fr-FR">français</a>
  1155. <a class="item " href="/diogo/gnu-social/issues/206?lang=nl-NL">Nederlands</a>
  1156. <a class="item " href="/diogo/gnu-social/issues/206?lang=lv-LV">latviešu</a>
  1157. <a class="item " href="/diogo/gnu-social/issues/206?lang=ru-RU">русский</a>
  1158. <a class="item " href="/diogo/gnu-social/issues/206?lang=ja-JP">日本語</a>
  1159. <a class="item " href="/diogo/gnu-social/issues/206?lang=es-ES">español</a>
  1160. <a class="item " href="/diogo/gnu-social/issues/206?lang=pt-BR">português do Brasil</a>
  1161. <a class="item " href="/diogo/gnu-social/issues/206?lang=pl-PL">polski</a>
  1162. <a class="item " href="/diogo/gnu-social/issues/206?lang=bg-BG">български</a>
  1163. <a class="item " href="/diogo/gnu-social/issues/206?lang=it-IT">italiano</a>
  1164. <a class="item " href="/diogo/gnu-social/issues/206?lang=fi-FI">suomi</a>
  1165. <a class="item " href="/diogo/gnu-social/issues/206?lang=tr-TR">Türkçe</a>
  1166. <a class="item " href="/diogo/gnu-social/issues/206?lang=cs-CZ">čeština</a>
  1167. <a class="item " href="/diogo/gnu-social/issues/206?lang=sr-SP">српски</a>
  1168. <a class="item " href="/diogo/gnu-social/issues/206?lang=sv-SE">svenska</a>
  1169. <a class="item " href="/diogo/gnu-social/issues/206?lang=ko-KR">한국어</a>
  1170. <a class="item " href="/diogo/gnu-social/issues/206?lang=gl-ES">galego</a>
  1171. <a class="item " href="/diogo/gnu-social/issues/206?lang=uk-UA">українська</a>
  1172. <a class="item " href="/diogo/gnu-social/issues/206?lang=en-GB">English (United Kingdom)</a>
  1173. <a class="item " href="/diogo/gnu-social/issues/206?lang=hu-HU">Magyar</a>
  1174. <a class="item " href="/diogo/gnu-social/issues/206?lang=sk-SK">Slovenčina</a>
  1175. <a class="item " href="/diogo/gnu-social/issues/206?lang=id-ID">Indonesian</a>
  1176. <a class="item " href="/diogo/gnu-social/issues/206?lang=fa-IR">Persian</a>
  1177. </div>
  1178. </div>
  1179. </div>
  1180. </div>
  1181. </footer>
  1182. </body>
  1183. <link rel="stylesheet" href="/plugins/highlight-9.6.0/github.css">
  1184. <script src="/plugins/highlight-9.6.0/highlight.pack.js"></script>
  1185. <link rel="stylesheet" href="/plugins/dropzone-4.2.0/dropzone.css">
  1186. <script src="/plugins/dropzone-4.2.0/dropzone.js"></script>
  1187. <script src="/js/libs/emojify-1.1.0.min.js"></script>
  1188. <script src="/js/libs/clipboard-1.5.9.min.js"></script>
  1189. </html>