From 2ca6cdb4bb56cb15fc784258b7669f9be95387c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Wed, 22 May 2013 15:49:24 +0200
Subject: [PATCH] Sql.rsql: Implemented generic proxy of functions.

---
 lib/modules/Sql.pmod/rsql.pike                    | 13 +++++++++++++
 lib/modules/Tools.pmod/Standalone.pmod/rsqld.pike |  6 ++++++
 2 files changed, 19 insertions(+)

diff --git a/lib/modules/Sql.pmod/rsql.pike b/lib/modules/Sql.pmod/rsql.pike
index f2c1b9b798..a594e55232 100644
--- a/lib/modules/Sql.pmod/rsql.pike
+++ b/lib/modules/Sql.pmod/rsql.pike
@@ -115,6 +115,11 @@ protected mixed do_request(int cmd, mixed|void arg, int|void noreconnect)
   }
 }
 
+protected mixed do_proxy(string cmd, array(mixed) args)
+{
+  return do_request('P', ({ cmd, args }));
+}
+
 void select_db(string the_db)
 {
   do_request('D', the_db);
@@ -285,6 +290,14 @@ void set_charset(string charset)
   do_request('H', charset);
 }
 
+protected function|mixed `->(string cmd)
+{
+  return ::`->(cmd) ||
+    lambda(mixed ... args) {
+      return do_proxy(cmd, args);
+    };
+}
+
 void create(string|void host, string|void db, string|void user,
 	    string|void _pw, mapping|void options)
 {
diff --git a/lib/modules/Tools.pmod/Standalone.pmod/rsqld.pike b/lib/modules/Tools.pmod/Standalone.pmod/rsqld.pike
index 55d55a3ae9..de802d0092 100644
--- a/lib/modules/Tools.pmod/Standalone.pmod/rsqld.pike
+++ b/lib/modules/Tools.pmod/Standalone.pmod/rsqld.pike
@@ -278,6 +278,11 @@ class Connection
     get_query(args[0])->seek(args[1]);
   }
 
+  protected mixed cmd_proxy(array(string|mixed) cmd_args)
+  {
+    return predef::`->(sqlobj, cmd_args[0])(@cmd_args[1]);
+  }
+
   protected string cmd_get_charset()
   {
     return sqlobj->get_charset();
@@ -311,6 +316,7 @@ class Connection
       'H': cmd_set_charset,
       'I': cmd_srvinfo,
       'N': cmd_numrows,
+      'P': cmd_proxy,
       'Q': cmd_bigquery,
       'R': cmd_fetchrow,
       'S': cmd_seek,
-- 
GitLab