Ë 0´…‡ãóº—ddlZddlZddlZddlZddlZddlmZd„ZGd„dej«Z Gd„dejjj«Z y) éNé)Úindexapicó€—|jdd«}|jdd«}|jd«r|dddz}|S)Nó_s\_ó%s\%ó*éÿÿÿÿ)ÚreplaceÚendswith)Úpatterns úBusr/lib/python3.12/site-packages/hgext/infinitepush/sqlindexapi.pyÚ_convertbookmarkpatternrsE€Ø�o‰o˜d FÓ+€GØ�o‰o˜d FÓ+€GØ×Ñ˜ÔØ˜#˜2�, Ñ%ˆØ €Nócóp‡—eZdZdZ dˆfd„ Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„ZˆxZS)Ú sqlindexapiz< Sql backend for infinitepush index. See schema.sql c óP•—tt|� «||_|||||dœ|_d|_d|_|stj}tj|¬«tj«|_ |jj|«d|_| |_| |_y)N)shostsportsdatabasesuserspassword)ÚfilenameF)ÚsuperrÚ__init__ÚreponameÚsqlargsÚsqlconnÚ sqlcursorÚosÚdevnullÚloggingÚ basicConfigÚ getLoggerÚlogÚsetLevelÚ _connectedÚ _waittimeoutÚ _locktimeout) ÚselfrÚhostÚportÚdatabaseÚuserÚpasswordÚlogfileÚloglevelÚ waittimeoutÚ locktimeoutÚ __class__s €r rzsqlindexapi.__init__ s”ø€ô Œk˜4Ñ)Ô+Ø ˆŒ àØØ!ØØ!ñ  ˆŒ ðˆŒ ØˆŒÙÜ—j‘jˆGÜ×Ñ WÕ-Ü×$Ñ$Ó&ˆŒØ �‰×ј(Ô#؈ŒØ'ˆÔØ'ˆÕrcó(—|jrtjd«‚|jrtjd«‚d} t j j d i|j¤Ž|_|jjt«d|j_ |jjj!d |j"z«}|jj%«|_|jj'd |z«|jj'd |j(z«d|_y#tj jj$r#|dz}|dk(r‚tjd«YnwxYw�ŒN) NsSQL connection already opens*SQL cursor already open without connectionéTFrrgš™™™™™É?s%ssSET wait_timeout=%ssSET innodb_lock_wait_timeout=%s©)rrÚindexexceptionrÚmysqlÚ connectorÚconnectrÚset_converter_classÚCustomConverterÚ autocommitÚerrorsÚErrorÚtimeÚsleepÚ converterÚescaper"ÚcursorÚexecuter#r!)r$Úretryr,s r Ú sqlconnectzsqlindexapi.sqlconnectAsI€Ø �<Š<Ü×)Ñ)Ð*HÓIÐ IØ �>Š>Ü×)Ñ)Ø=óð ðˆØð Ü$Ÿ™×6Ñ6ÑF¸¿¹ÑF�” ð — ‘ ×0Ñ0´ÔAØ*/�— ‘ Ô'Øð—l‘l×,Ñ,×3Ñ3°E¸D×—|js|j«|S©N)r!rBrHs r Ú __enter__zsqlindexapi.__enter__ns€Ø�ŠØ �O‰OÔ Øˆ rcór—|€|jj«y|jj«yrJ)rÚcommitÚrollback)r$Úexc_typeÚexc_valÚexc_tbs r Ú__exit__zsqlindexapi.__exit__ss(€Ø Ð Ø �L‰L× Ñ Õ !à �L‰L× !Ñ !Õ #rc óZ—|js|j«|jjd|j|fz«|j j d||jf¬«|D�]6}|j j d|j«||jf¬«|j«}|j«}|jd|j««}t|j«d«}t|jd|««}|j j d|j«|j«|j«j«|j«j«|||||jf ¬«�Œ9y) NsADD BUNDLE %r %rs5INSERT INTO bundles(bundle, reponame) VALUES (%s, %s)©ÚparamsssINSERT INTO nodestobundle(node, bundle, reponame) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE bundle=VALUES(bundle)s committerrscommitter_dates�INSERT IGNORE INTO nodesmetadata(node, message, p1, p2, author, committer, author_date, committer_date, reponame) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s))r!rBrÚinforrr@ÚhexÚextrar(ÚgetÚintÚdateÚ descriptionÚp1Úp2) r$ÚbundleidÚnodesctxÚctxrXÚ author_nameÚcommitter_nameÚ author_dateÚcommitter_dates r Ú addbundlezsqlindexapi.addbundleysU€Ø�ŠØ �O‰OÔ Ø �‰� ‰ Ð)¨T¯]©]¸HÐ,EÑEÔFØ �‰×ÑØ DؘdŸm™mÐ,ð ô ôˆCØ �N‰N× "Ñ "ð)🙛  8¨T¯]©]Ð;ð #ô ð—I‘I“KˆEØŸ(™(›*ˆKØ"ŸY™Y |°S·X±X³ZÓ@ˆNܘcŸh™h›j¨™mÓ,ˆKÜ  §¡Ð+<¸kÓ!JÓKˆNØ �N‰N× "Ñ "ð8ð —G‘G“IØ—O‘OÓ%Ø—F‘F“H—L‘L“NØ—F‘F“H—L‘L“NØØ"ØØ"Ø—M‘Mð ð #ö ñrcóæ—|js|j«|jjd|j||fz«|j j d|||jf¬«y)zRTakes a bookmark name and hash, and records mapping in the metadata store.s&ADD BOOKMARKS %r bookmark: %r node: %rssINSERT INTO bookmarkstonode(bookmark, node, reponame) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE node=VALUES(node)rTN©r!rBrrVrrr@)r$ÚbookmarkÚnodes r Ú addbookmarkzsqlindexapi.addbookmark sh€ð�ŠØ �O‰OÔ Ø �‰� ‰ Ø 5Ø�}‰}˜h¨Ð-ñ .ô ð �‰×Ñð Mà˜d D§M¡MÐ2ð õ rcó4—|js|j«g}g}|j«D]4\}}|jd«|j |||j f«Œ6dj |«}|jjd|z|¬«y)Ns (%s, %s, %s)ó,siINSERT INTO bookmarkstonode(bookmark, node, reponame) VALUES %s ON DUPLICATE KEY UPDATE node=VALUES(node)rT) r!rBÚitemsÚappendÚextendrÚjoinrr@)r$Ú bookmarksÚargsÚvaluesrirjs r Úaddmanybookmarkszsqlindexapi.addmanybookmarks¯s�€Ø�ŠØ �O‰OÔ ØˆØˆØ'Ÿo™oÖ/‰NˆH�dØ �K‰K˜Ô (Ø �M‰M˜8 T¨4¯=©=Ð9Õ :ð0ð�y‰y˜‹ˆà �‰×Ñð CØEIñ Jàð õ rcóî—|js|j«|jjd|z«|D]6}t |«}|j j d||jf¬«Œ8y)zÈAccepts list of bookmark patterns and deletes them. If `commit` is set then bookmark will actually be deleted. Otherwise deletion will be delayed until the end of transaction. sDELETE BOOKMARKS: %ssFDELETE from bookmarkstonode WHERE bookmark LIKE (%s) and reponame = %srTN)r!rBrrVrrr@r)r$Úpatternsr s r Údeletebookmarkszsqlindexapi.deletebookmarks¿sg€ð �ŠØ �O‰OÔ Ø �‰� ‰ Ð-°Ñ8Ô9ÛˆGÜ-¨gÓ6ˆGØ �N‰N× "Ñ "ð%à §¡Ð/ð #õ ñ rcóÚ—|js|j«|jjd|j|fz«|j j d||jf¬«|j j«}t|«dk7st|d«dk7r|jjd«y|dd}|jjd|z«|S) zAReturns the bundleid for the bundle that contains the given node.sGET BUNDLE %r %rsBSELECT bundle from nodestobundle WHERE node = %s AND reponame = %srTrrsNo matching nodeNsFound bundle %r© r!rBrrVrrr@ÚfetchallÚlen)r$rjÚresultÚbundles r Ú getbundlezsqlindexapi.getbundleÏsÅ€à�ŠØ �O‰OÔ Ø �‰� ‰ Ð)¨T¯]©]¸DÐ,AÑAÔBØ �‰×Ñð 1à˜$Ÿ-™-Ð(ð ô ð —‘×(Ñ(Ó*ˆÜ ˆv‹;˜!Ò œs 6¨!¡9›~°Ò2Ø �H‰H�M‰MÐ-Ô .ØØ˜‘˜1‘ˆØ �‰� ‰ Ð(¨6Ñ1Ô2؈ rcóÚ—|js|j«|jjd|j|fz«|j j d||jf¬«|j j«}t|«dk7st|d«dk7r|jjd«y|dd}|jjd|z«|S) zBReturns the node for the given bookmark. None if it doesn't exist.s"GET NODE reponame: %r bookmark: %rsFSELECT node from bookmarkstonode WHERE bookmark = %s AND reponame = %srTrrsNo matching bookmarkNs Found node %rrz)r$rir}rjs r Úgetnodezsqlindexapi.getnodeásÉ€à�ŠØ �O‰OÔ Ø �‰� ‰ Ø 1°T·]±]ÀHÐ4MÑ Mô ð �‰×Ñð /à˜dŸm™mÐ,ð ô ð —‘×(Ñ(Ó*ˆÜ ˆv‹;˜!Ò œs 6¨!¡9›~°Ò2Ø �H‰H�M‰MÐ1Ô 2ØØ�a‰y˜‰|ˆØ �‰� ‰ Ð&¨Ñ-Ô.؈ rcó°—|js|j«|jjd|j|fz«t |«}|j jd|j|f¬«|j j«}i}|D]:}t|«dk7r|jjd|z«Œ0|d||d<Œ<|S)Ns&QUERY BOOKMARKS reponame: %r query: %rsSSELECT bookmark, node from bookmarkstonode WHERE reponame = %s AND bookmark LIKE %srTésBad row returned: %srr) r!rBrrVrrrr@r{r|)r$Úqueryr}rrÚrows r Ú getbookmarkszsqlindexapi.getbookmarksõsÉ€Ø�ŠØ �O‰OÔ Ø �‰� ‰ Ø 5¸¿¹ÈÐ8NÑ Nô ô(¨Ó.ˆØ �‰×Ñð 2à—M‘M 5Ð)ð ô ð —‘×(Ñ(Ó*ˆØˆ ÛˆCÜ�3‹x˜1Š}Ø—‘— ‘ Ð5¸Ñ;Ô<ØØ # A¡ˆI�c˜!‘fÒ ð ð Ðrcóæ—|js|j«|jjd|j||fz«|j j d||j|f¬«y)NsHINSERT METADATA, QUERY BOOKMARKS reponame: %r node: %r, jsonmetadata: %ssPUPDATE nodesmetadata SET optional_json_metadata=%s WHERE reponame=%s AND node=%srTrh)r$rjÚ jsonmetadatas r Úsaveoptionaljsonmetadataz$sqlindexapi.saveoptionaljsonmetadata si€Ø�ŠØ �O‰OÔ Ø �‰� ‰ ð0ð�}‰}˜d LÐ1ñ  2ô ð �‰×Ñð 'à  $§-¡-°Ð6ð õ r)i,éx)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrBrGrKrRrfrkrurxrr�r†r‰Ú __classcell__)r.s@r rrsTø„ñðØõ(òB"òHòò $ò %òN  ò ò ò ò$ò(ö* rrcó(—eZdZdZdd„Zdd„Zdd„Zy)r7ziEnsure that all values being returned are returned as python string (versus the default byte arrays).Ncó—t|«SrJ©Ústr©r$ÚvalueÚdscs r Ú_STRING_to_pythonz!CustomConverter._STRING_to_python ó €Ü�5‹zÐrcó—t|«SrJr’r”s r Ú_VAR_STRING_to_pythonz%CustomConverter._VAR_STRING_to_python#r˜rcó—t|«SrJr’r”s r Ú_BLOB_to_pythonzCustomConverter._BLOB_to_python&r˜rrJ)r‹rŒr�rŽr—ršrœr1rr r7r7s„ñ)óóôrr7)rrr;rDÚmysql.connectorr3Úrrrr4Ú conversionÚMySQLConverterr7r1rr Úr¡sOðóÛ Û ãÛåòô~ �(×#Ñ#ô~ ôB �e—o‘o×0Ñ0×?Ñ?õ r