Index: mythtv/programs/mythbackend/mainserver.h
===================================================================
--- mythtv/programs/mythbackend/mainserver.h	(revision 19543)
+++ mythtv/programs/mythbackend/mainserver.h	(working copy)
@@ -133,6 +133,7 @@
     void HandleSetBookmark(QStringList &tokens, PlaybackSock *pbs);
     void HandleSettingQuery(QStringList &tokens, PlaybackSock *pbs);
     void HandleSetSetting(QStringList &tokens, PlaybackSock *pbs);
+    void HandleSqlQuery(QStringList &slist, PlaybackSock *pbs);
     void HandleVersion(MythSocket *socket, QString version);
     void HandleBackendRefresh(MythSocket *socket);
     void HandleQueryLoad(PlaybackSock *pbs);
Index: mythtv/programs/mythbackend/mainserver.cpp
===================================================================
--- mythtv/programs/mythbackend/mainserver.cpp	(revision 19543)
+++ mythtv/programs/mythbackend/mainserver.cpp	(working copy)
@@ -572,6 +572,13 @@
         else
             HandleSetSetting(tokens, pbs);
     }
+    else if (command == "SQL_QUERY")
+    {
+        if (listline.size() != 2)
+            VERBOSE(VB_IMPORTANT, "Bad SQL_QUERY request");
+        else
+            HandleSqlQuery(listline, pbs);
+    }
     else if (command == "ALLOW_SHUTDOWN")
     {
         if (tokens.size() != 1)
@@ -3648,6 +3655,51 @@
     return;
 }
 
+
+/**
+ * \addingroup myth_network_protocol
+ * \par        SQL_QUERY \e query
+ * The \e query parameter is the SQL query
+ * Returns results
+ */
+void MainServer::HandleSqlQuery(QStringList &slist, PlaybackSock *pbs)
+{
+    MythSocket *pbssock = pbs->getSocket();
+    QString querystr = slist[1];
+
+    MSqlQuery query(MSqlQuery::InitCon());
+
+    query.prepare(querystr);
+
+    QStringList outputlist;
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythDB::DBError("HandleSqlQuery", query);
+        outputlist << "-1";
+        outputlist << query.lastError().text();
+    }
+    else
+    {
+        if (query.isSelect())
+        {
+            outputlist << QString::number(query.size());
+            while (query.next())
+            {
+                for (int i = 0; query.value(i).isValid(); i++)
+                    outputlist << query.value(i).toString();
+            }
+        }
+        else
+        {
+            outputlist << QString::number(query.numRowsAffected());
+        }
+    }
+
+    SendResponse(pbssock, outputlist);
+}
+
+
 void MainServer::HandleFileTransferQuery(QStringList &slist,
                                          QStringList &commands,
                                          PlaybackSock *pbs)
