# Name: rah_sql_query v0.4 # Type: Admin only plugin # Run plain SQL-queries directly from Textpattern's Extensions-tab # Author: Jukka Svahn # URL: http://rahforum.biz # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo2OiJhdXRob3IiO3M6MTE6Ikp1a2thIFN2YWhuIjtzOjEwOiJhdXRob3JfdXJp IjtzOjE5OiJodHRwOi8vcmFoZm9ydW0uYml6IjtzOjExOiJkZXNjcmlwdGlvbiI7czo2NDoi UnVuIHBsYWluIFNRTC1xdWVyaWVzIGRpcmVjdGx5IGZyb20gVGV4dHBhdHRlcm4ncyBFeHRl bnNpb25zLXRhYiI7czo0OiJoZWxwIjtzOjI5NDM6Igk8aDE+cmFoX3NxbF9xdWVyeTwvaDE+ CgoJPHA+VGlyZWQgb2YgcnVubmluZyBsaXR0bGUgcGhwIGxpbmUsIG9yIGxvZ2luIHRvIHBo cE15QWRtaW4gdG8gcnVuIHNpbmdsZSwgdmVyeSBzaW1wbGUgcXVlcnk/IERvIHlvdSB3aXNo IHlvdSBjb3VsZCBkbyBpdCBmcm9tIFRleHRwYXR0ZXJuJiM4MjE3O3MgdXNlci1pbnRlcmZh Y2U/IFJhaF9zcWxfcXVlcnkgYnJpbmdzIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+ IHF1ZXJpZXMgZGlyZWN0bHkgdG8gYmFja3N0YWdlIG9mIGFsbCBUZXh0cGF0dGVybiBpbnN0 YWxscy4gUnVuIHF1ZXJpZXMgZGlyZWN0bHkgZnJvbSBUZXh0cGF0dGVybiYjODIxNztzIGJh Y2tlbmQsIG5vdGhpbmcgbW9yZSBvciBsZXNzLiBPbmUgZmllbGQgdG8gdHlwZSBpbiwgb25l IGJ1dHRvbi4gT25lIHRhc2suPC9wPgoKCTx1bD4KCQk8bGk+VmVyc2lvbjogMC40PC9saT4K CQk8bGk+VXBkYXRlZDogMjAxMS8wNi8wNSA4OjEwIFBNIDxzcGFuIGNsYXNzPSJjYXBzIj5V VEM8L3NwYW4+PC9saT4KCTwvdWw+CgoJPGgzPlRhYmxlIG9mIENvbnRlbnRzPC9oMz4KCgk8 dWw+CgkJPGxpPjxhIGhyZWY9IiNsaXN0LW9mLWZlYXR1cmVzIj5MaXN0IG9mIGZlYXR1cmVz PC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNyZXF1aXJlbWVudHMiPlJlcXVpcmVtZW50czwv YT48L2xpPgoJCTxsaT48YSBocmVmPSIjaW5zdGFsbGF0aW9uLWFuZC11c2FnZSI+SW5zdGFs bGF0aW9uIGFuZCB1c2FnZTwvYT48L2xpPgoJPC91bD4KCgk8aDMgaWQ9Imxpc3Qtb2YtZmVh dHVyZXMiPkxpc3Qgb2YgZmVhdHVyZXM8L2gzPgoKCTx1bD4KCQk8bGk+QWxsb3dzIHlvdSB0 byBydW4gPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gcXVlcmllcyBkaXJlY3RseSBm cm9tIFRleHRwYXR0ZXJuJiM4MjE3O3MgdXNlci1pbnRlcmZhY2U8L2xpPgoJCTxsaT5WZXJ5 IHNpbXBsZSBhbmQgY2xlYW4gYWRtaW4gcGFuZWwuPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJy ZXF1aXJlbWVudHMiPlJlcXVpcmVtZW50czwvaDM+CgoJPHA+TWluaW11bSByZXF1aXJlbWVu dDo8L3A+CgoJPHVsPgoJCTxsaT5UZXh0cGF0dGVybiA0LjIuMCBvciBuZXdlci48L2xpPgoJ PC91bD4KCgk8aDMgaWQ9Imluc3RhbGxhdGlvbi1hbmQtdXNhZ2UiPkluc3RhbGxhdGlvbiBh bmQgdXNhZ2U8L2gzPgoKCTxwPlRoZSBnZW5lcmFsIGJlaGF2aW9yIHN0YW5kczo8L3A+CgoJ PG9sPgoJCTxsaT5OYXZpZ2F0ZSB0byB5b3VyIFRleHRwYXR0ZXJuIGluc3RhbGwmIzgyMTc7 cyBQbHVnaW5zIHBhbmUuPC9saT4KCQk8bGk+UGFzdGUgdGhlIGRvd25sb2FkZWQgcGx1Z2lu IGNvZGUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsZXIgZmllbGQuPC9saT4KCQk8bGk+Q2xpY2sg dGhlIGJ1dHRvbiBhbmQgcnVuIHRoZSBhdXRvbWF0ZWQgc2V0dXAgcHJvZ3JhbS48L2xpPgoJ CTxsaT5XaGVuIGFsbCBkb25lLCBqdXN0IGFjdGl2YXRlIHRoZSBwbHVnaW4gZnJvbSB0aGUg bGlzdCBvZiBwbHVnaW5zLjwvbGk+CgkJPGxpPk5vdyB0aGUgbmV3IHJhaF9zcWxfcXVlcnkg aXMgYWNjZXNzaWJsZSB1bmRlciBFeHRlbnNpb25zLjwvbGk+Cgk8L29sPgoKCTxoMyBpZD0i Y2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gzPgoKCTxwPjxzdHJvbmc+VmVyc2lvbiAwLjQ8L3N0 cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5BZGRlZDogcmFoX3VpIGNsYXNzZXMgdG8gY29tbW9u IGVsZW1lbnRzIGZvciBlYXNpZXIgdGhlbWluZyBvZiB0aGUgcGx1Z2luIGludGVyZmFjZS48 L2xpPgoJCTxsaT5DaGFuZ2VkOiBNYWtlIHRoZSBuYXZpZ2F0aW9uIGxpbmsgYW5kIHBhZ2Ug dGl0bGUgdG8gdXNlIGxhbmd1YWdlIHN0cmluZ3MuPC9saT4KCQk8bGk+Q2hhbmdlZDogVXNl IDxjb2RlPnNldF9wcmVmKCk8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+c2FmZV9pbnNlcnQo KTwvY29kZT4uPC9saT4KCQk8bGk+Q2hhbmdlZDogUmV0dXJuIHVuaW5zdGFsbGVyIHF1ZXJ5 JiM4MjE3O3Mgc3RhdHVzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPi48L2xp PgoJCTxsaT5GaXg6IERvbiYjODIxNzt0IHNwaXQgb3V0IEphdmFTY3JpcHQgdG8gdGhlIHRv cCBvZiB0aGUgYWRtaW4tc2lkZSBwYWdlIGlmIEphdmFTY3JpcHQgaXMgZGlzYWJsZWQuPC9s aT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAuMzwvc3Ryb25nPjwvcD4KCgk8dWw+ CgkJPGxpPkFkZGVkIHByaXZpbGVnZXMgZm9yIHRoZSBvcHRpb25zIGxpbmsuPC9saT4KCQk8 bGk+Q2hhbmdlZCBwcml2aWxlZ2VzIGJhY2sgdG8gUHVibGlzaGVyIGFuZCBFZGl0b3IgKDEg YW5kIDIgbGV2ZWxzKSBpbiBmYXZvciBvZiB0aGUgcGx1Z2lucyBwYW5lJiM4MjE3O3Mgb3B0 aW9ucyBsaW5rLjwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVyc2lvbiAwLjI8L3N0cm9u Zz48L3A+CgoJPHVsPgoJCTxsaT5Ob3cgdGhlIHBhbmUgcmVxdWlyZXMgUHVibGlzaGVyJiM4 MjE3O3MgcHJpdmFsZWdlcy48L2xpPgoJCTxsaT5BZGRlZCBsYW5ndWFnZSBzdHJpbmcgc3Vw cG9ydC48L2xpPgoJCTxsaT5BZGRlZCBjb25maXJtYXRpb24gZGlhbG9nIGZvciBleHRyYSBz YWZldHkuPC9saT4KCQk8bGk+QWRkZWQgb3B0aW9uIHRvIGhpZGUgdGhlIHNhZmV0eSBub3Rp Y2UuPC9saT4KCQk8bGk+Tm93IGtlZXBzIHRoZSBsYXN0IHJ1biBxdWVyeSBpbiB0aGUgZmll bGQuPC9saT4KCQk8bGk+UmVtb3ZlZCBpbmxpbmUgc3R5bGVzLjwvbGk+CgkJPGxpPlVzZXMg VGV4dHBhdHRlcm4mIzgyMTc7cyBtZXNzYWdlIHN5c3RlbSB0byBkZWxpdmVyIHRoZSBmZWVk YmFjayBtZXNzYWdlcy48L2xpPgoJCTxsaT5Ob3cgcmVxdWlyZXMgVGV4dHBhdHRlcm4gdmVy c2lvbiA0LjIuMCBvciBuZXdlci48L2xpPgoJPC91bD4KCgk8cD48c3Ryb25nPlZlcnNpb24g MC4xPC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+Cgk8 L3VsPiI7czo0OiJjb2RlIjtzOjQwMzE6IgkjIyMjIyMjIyMjIyMjIyMjIyMKCSMKCSMJUmFo X3NxbF9xdWVyeS1wbHVnaW4gZm9yIFRleHRwYXR0ZXJuCgkjCXZlcnNpb24gMC40CgkjCWJ5 IEp1a2thIFN2YWhuCgkjCWh0dHA6Ly9yYWhmb3J1bS5iaXoKCSMKCSMJQ29weXJpZ2h0IChD KSAyMDExIEp1a2thIFN2YWhuIDxodHRwOi8vcmFoZm9ydW0uYml6PgoJIwlMaWNlbnNlZCB1 bmRlciBHTlUgR2VucmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgoJIwlodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCgkjCgkjIyMjIyMjIyMjIyMjIyMjIyMK CglpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCQlhZGRfcHJpdnMoJ3JhaF9zcWxf cXVlcnknLCAnMSwyJyk7CgkJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMucmFoX3NxbF9xdWVy eScsJzEsMicpOwoJCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsJ3JhaF9zcWxfcXVlcnkn LGdUeHQoJ3JhaF9zcWxfcXVlcnknKSA9PSAncmFoX3NxbF9xdWVyeScgPyAnUnVuIFF1ZXJp ZXMnIDogZ1R4dCgncmFoX3NxbF9xdWVyeScpKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygncmFo X3NxbF9xdWVyeScsJ3JhaF9zcWxfcXVlcnknKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygncmFo X3NxbF9xdWVyeV9oZWFkJywnYWRtaW5fc2lkZScsJ2hlYWRfZW5kJyk7CgkJcmVnaXN0ZXJf Y2FsbGJhY2soJ3JhaF9zcWxfcXVlcnlfcHJlZnMnLCdwbHVnaW5fcHJlZnMucmFoX3NxbF9x dWVyeScpOwoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdyYWhfc3FsX3F1ZXJ5X2NsZWFudXAnLCdw bHVnaW5fbGlmZWN5Y2xlLnJhaF9zcWxfcXVlcnknLCdkZWxldGVkJyk7Cgl9CgovKioKCVRo ZSBwYW5lCiovCgoJZnVuY3Rpb24gcmFoX3NxbF9xdWVyeSgpIHsKCQkKCQlyZXF1aXJlX3By aXZzKCdyYWhfc3FsX3F1ZXJ5Jyk7CgkJCgkJZ2xvYmFsICRldmVudCwgJHRleHRhcnJheSwg JHByZWZzOwoJCQoJCS8qCgkJCUFkZCBwcmVmIGlmIHRoZSBtZXNzYWdlIGlzIHNpZ25lZAoJ CSovCgkJCgkJaWYoZ3BzKCdyYWhfc3FsX3F1ZXJ5X2hpZGVtc2cnKSkgewoJCQlzZXRfcHJl ZigncmFoX3NxbF9xdWVyeV9oaWRlbXNnJywxLCdyYWgnLFBSRUZfSElEREVOLCd0ZXh0X2lu cHV0JywwLFBSRUZfUFJJVkFURSk7CgkJCSRwcmVmc1sncmFoX3NxbF9xdWVyeV9oaWRlbXNn J10gPSAxOwoJCX0KCQkKCQkvKgoJCQlNYWtlIHN1cmUgbGFuZ3VhZ2Ugc3RyaW5ncwoJCQlh cmUgc2V0CgkJKi8KCQkKCQlmb3JlYWNoKAoJCQlhcnJheSgKCQkJCSdyYWhfc3FsX3F1ZXJ5 JyA9PiAnUnVuIFF1ZXJpZXMnLAoJCQkJJ3JhaF9zcWxfcXVlcnlfdG9fcnVuJyA9PiAnUXVl cnkgdG8gcnVuJywKCQkJCSdyYWhfc3FsX3F1ZXJ5X2dvJyA9PiAnUnVuIHRoZSBxdWVyeScs CgkJCQkncmFoX3NxbF9xdWVyeV9vaycgPT4gJ1F1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc2Z1bGx5 JywKCQkJCSdyYWhfc3FsX3F1ZXJ5X2Vycm9yJyA9PiAnU29tZXRoaW5nIGdvbmUgdGVycmli bHkgd3Jvbmcgd2l0aCB0aGUgcXVlcnknLAoJCQkJJ3JhaF9zcWxfcXVlcnlfbm90aWNlJyA9 PiAnUGxlYXNlIG5vdGUgdGhhdCBtaXNzdXNlZCBxdWVyaWVzIGNhbiBjYXVzZSBsb3NzIG9m IGRhdGEsIGhhcm0geW91ciBkYXRhYmFzZSBhbmQvb3IgVGV4dHBhdHRlcm4gaW5zdGFsbC4g SWYgeW91IGFyZSB1bnN1cmUsIHJlbWVtYmVyIHRvIGJhY2t1cCB0aGUgZGF0YWJhc2UgYmVm b3JlIHJ1bm5pbmcgYSBxdWVyeS4gUmVjb21tZW5kZWQgdG8gdXNlIG9ubHkgdXNlIG9uIGRl dmVsb3BtZW50IGFuZCB0ZXN0IGluc3RhbGxzLCBub3Qgb24gbGl2ZSBzaXRlcy4nLAoJCQkJ J3JhaF9zcWxfcXVlcnlfaGlkZScgPT4gJ0hpZGUgdGhlIG1lc3NhZ2UnCgkJCSkgYXMgJHN0 cmluZyA9PiAkdHJhbnNsYXRpb24KCQkpCgkJCWlmKCFpc3NldCgkdGV4dGFycmF5WyRzdHJp bmddKSkKCQkJCSR0ZXh0YXJyYXlbJHN0cmluZ10gPSAkdHJhbnNsYXRpb247CgkJCgkJJG1z ZyA9ICcnOwoJCQoJCSRvdXRbXSA9IAoJCQknPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249 ImluZGV4LnBocCIgaWQ9InJhaF9zcWxfcXVlcnlfY29udGFpbmVyIiBjbGFzcz0icmFoX3Vp X2NvbnRhaW5lciI+Jy5uOwoJCQkKCQkvKgoJCQlSdW4gdGhlIHF1ZXJ5IGlmIHNvbWV0aGlu ZyB3YXMKCQkJc2VudAoJCSovCgkJCgkJaWYocHMoJ3F1ZXJ5JykpIHsKCQkJQCRxdWVyeSA9 IHNhZmVfcXVlcnkocHMoJ3F1ZXJ5JykpOwoJCQkkbXNnID0gJHF1ZXJ5ID8gZ1R4dCgncmFo X3NxbF9xdWVyeV9vaycpIDogZ1R4dCgncmFoX3NxbF9xdWVyeV9lcnJvcicpOwoJCX0KCQkK CQlpZighaXNzZXQoJHByZWZzWydyYWhfc3FsX3F1ZXJ5X2hpZGVtc2cnXSkpCgkJCSRvdXRb XSA9IAoJCQkJJwk8cD4nLmdUeHQoJ3JhaF9zcWxfcXVlcnlfbm90aWNlJykuJyA8YSBocmVm PSI/ZXZlbnQ9Jy4kZXZlbnQuJyZhbXA7cmFoX3NxbF9xdWVyeV9oaWRlbXNnPTEiPicuZ1R4 dCgncmFoX3NxbF9xdWVyeV9oaWRlJykuJzwvYT48L3A+Jy5uOwoJCQoJCSRvdXRbXSA9CgkJ CgkJCScJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZXZlbnQiIHZhbHVlPSInLiRldmVu dC4nIiAvPicubi4KCQkJJwk8cD4nLm4uCgkJCScJCTxsYWJlbD4nLm4uCgkJCScJCQknLmdU eHQoJ3JhaF9zcWxfcXVlcnlfdG9fcnVuJykuJzxiciAvPicubi4KCQkJJwkJCTx0ZXh0YXJl YSBuYW1lPSJxdWVyeSIgcm93cz0iMTAiIGNsYXNzPSJjb2RlIiBjb2xzPSIzMCI+Jy5odG1s c3BlY2lhbGNoYXJzKHBzKCdxdWVyeScpKS4nPC90ZXh0YXJlYT4nLm4uCgkJCScJCTwvbGFi ZWw+Jy5uLgoJCQknCTwvcD4nLm4uCgkJCScJPHA+Jy5uLgoJCQknCQk8aW5wdXQgdHlwZT0i c3VibWl0IiB2YWx1ZT0iJy5nVHh0KCdyYWhfc3FsX3F1ZXJ5X2dvJykuJyIgY2xhc3M9InB1 Ymxpc2giIC8+Jy5uLgoJCQknCTwvcD4nLm47CgkJCgkJJG91dFtdID0KCQkJJzwvZm9ybT4n OwoJCQkKCQlwYWdldG9wKGdUeHQoJ3JhaF9zcWxfcXVlcnknKSwkbXNnKTsKCQllY2hvIGlt cGxvZGUoJycsJG91dCk7Cgl9CgovKioKCUFkZHMgc3R5bGVzIGFuZCBKYXZhU2NyaXB0IHRv IHRoZSA8aGVhZD4KKi8KCglmdW5jdGlvbiByYWhfc3FsX3F1ZXJ5X2hlYWQoKSB7CgkJCgkJ Z2xvYmFsICRldmVudDsKCQkKCQlpZigkZXZlbnQgIT0gJ3JhaF9zcWxfcXVlcnknKQoJCQly ZXR1cm47CgkJCgkJJHN0cmluZyA9IGdUeHQoJ2FyZV95b3Vfc3VyZScpOwoJCQoJCWVjaG8g PDw8RU9GCgkJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJCQkjcmFoX3NxbF9xdWVyeV9j b250YWluZXIgewoJCQkJCXdpZHRoOiA2NTBweDsKCQkJCQltYXJnaW46IDAgYXV0bzsKCQkJ CX0KCQkJCSNyYWhfc3FsX3F1ZXJ5X2NvbnRhaW5lciB0ZXh0YXJlYSB7CgkJCQkJd2lkdGg6 IDEwMCU7CgkJCQl9CgkJCTwvc3R5bGU+CgkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij4KCQkJCTwhLS0KCQkJCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CgkJCQkJ JCgnZm9ybSNyYWhfc3FsX3F1ZXJ5X2NvbnRhaW5lcicpLnN1Ym1pdCgKCQkJCQkJZnVuY3Rp b24oKSB7CgkJCQkJCQlyZXR1cm4gdmVyaWZ5KCd7JHN0cmluZ30nKTsKCQkJCQkJfQoJCQkJ CSkKCQkJCX0pOwoJCQkJLS0+CgkJCTwvc2NyaXB0PgpFT0Y7Cgl9CgovKioKCURvIGNsZWFu IHVwIHdoZW4gdW5pbnN0YWxsaW5nLiBSZW1vdmVzIGFkZGVkIHByZWZzLgoqLwoKCWZ1bmN0 aW9uIHJhaF9zcWxfcXVlcnlfY2xlYW51cCgpIHsKCQlyZXR1cm4gCgkJCXNhZmVfZGVsZXRl KAoJCQkJJ3R4cF9wcmVmcycsCgkJCQkibmFtZT0ncmFoX3NxbF9xdWVyeV9oaWRlbXNnJyIK CQkJKTsKCX0KCi8qKgoJUmVkaXJlY3QgdG8gdGhlIHByZWZzIHBhbmUKKi8KCglmdW5jdGlv biByYWhfc3FsX3F1ZXJ5X3ByZWZzKCkgewoJCWhlYWRlcignTG9jYXRpb246ID9ldmVudD1y YWhfc3FsX3F1ZXJ5Jyk7CgkJZWNobyAKCQkJJzxwPicubi4KCQkJJwk8YSBocmVmPSI/ZXZl bnQ9cmFoX3NxbF9xdWVyeSI+Jy5nVHh0KCdjb250aW51ZScpLic8L2E+Jy5uLgoJCQknPC9w Pic7Cgl9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZs YWdzIjtzOjE6IjMiO3M6MzoibWQ1IjtzOjMyOiJkNDJlYjc5YWNlZDljZWJkMjgzZjBiOGRh YWRiNzZlYyI7czo0OiJuYW1lIjtzOjEzOiJyYWhfc3FsX3F1ZXJ5IjtzOjc6InZlcnNpb24i O3M6MzoiMC40Ijt9