Index: branches/version-2_12-dev/data/class/SC_Query.php
===================================================================
--- branches/version-2_12-dev/data/class/SC_Query.php	(revision 21867)
+++ branches/version-2_12-dev/data/class/SC_Query.php	(revision 21903)
@@ -39,4 +39,5 @@
     var $order = '';
     var $force_run = false;
+    static $arrInstance = array();
 
     /**
@@ -98,14 +99,14 @@
      */
     function getSingletonInstance($dsn = '', $force_run = false, $new = false) {
-        if (!isset($GLOBALS['_SC_Query_instance'])
-            || is_null($GLOBALS['_SC_Query_instance'])) {
-            $GLOBALS['_SC_Query_instance'] =& new SC_Query_Ex($dsn, $force_run, $new);
-        }
-        $GLOBALS['_SC_Query_instance']->where = '';
-        $GLOBALS['_SC_Query_instance']->arrWhereVal = array();
-        $GLOBALS['_SC_Query_instance']->order = '';
-        $GLOBALS['_SC_Query_instance']->groupby = '';
-        $GLOBALS['_SC_Query_instance']->option = '';
-        return $GLOBALS['_SC_Query_instance'];
+        if (!isset(SC_Query_Ex::$arrInstance[$dsn])) {
+            SC_Query_Ex::$arrInstance[$dsn] =& new SC_Query_Ex($dsn, $force_run, $new);
+        }
+        /*
+         * 歴史的な事情で、このメソッドの呼び出し元は参照で受け取る確率がある。
+         * 退避しているインスタンスをそのまま返すと、退避している SC_Query の
+         * プロパティを直接書き換えることになる。これを回避するため、クローンを返す。
+         * 厳密な意味でのシングルトンではないが、パフォーマンス的に大差は無い。
+         */
+        return clone SC_Query_Ex::$arrInstance[$dsn];
     }
 
