Author: mysqlpp
Date: Wed Dec 23 12:54:02 2009
New Revision: 2594

URL: http://svn.gna.org/viewcvs/mysqlpp?rev=2594&view=rev
Log:
- Query copy ctor and assignment operator now copy the query string as
  well, making for a deeper copy.  Does not yet support template
  queries.  Patch by Steven Van Ingelgem <[email protected]>
- Wrote test for above patch.  Test fails due to lack of tquery support.
  Checking it in anyway as the most efficient way to bounce ball back
  into Steven's court. :)

Added:
    trunk/test/query_copy.cpp
Modified:
    trunk/lib/query.cpp
    trunk/mysql++.bkl

Modified: trunk/lib/query.cpp
URL: 
http://svn.gna.org/viewcvs/mysqlpp/trunk/lib/query.cpp?rev=2594&r1=2593&r2=2594&view=diff
==============================================================================
--- trunk/lib/query.cpp (original)
+++ trunk/lib/query.cpp Wed Dec 23 12:54:02 2009
@@ -84,6 +84,9 @@
 
        // See above for reason we override locale for Query streams.
        imbue(std::locale::classic());
+
+       // Copy the other query as best we can
+       *this << q.sbuffer_.str();
 }
 
 
@@ -249,6 +252,7 @@
        template_defaults = rhs.template_defaults;
        conn_ = rhs.conn_;
        copacetic_ = rhs.copacetic_;
+       *this << rhs.sbuffer_.str();
 
        return *this;
 }

Modified: trunk/mysql++.bkl
URL: 
http://svn.gna.org/viewcvs/mysqlpp/trunk/mysql%2B%2B.bkl?rev=2594&r1=2593&r2=2594&view=diff
==============================================================================
--- trunk/mysql++.bkl (original)
+++ trunk/mysql++.bkl Wed Dec 23 12:54:02 2009
@@ -238,6 +238,9 @@
         <sources>test/null_comparison.cpp</sources>
       </exe>
     </if>
+    <exe id="test_query_copy" template="programs">
+      <sources>test/query_copy.cpp</sources>
+    </exe>
     <if cond="FORMAT!='msvs2003prj'">
       <!-- VC++ 2003 can't compile this -->
       <exe id="test_qssqls" template="programs">

Added: trunk/test/query_copy.cpp
URL: 
http://svn.gna.org/viewcvs/mysqlpp/trunk/test/query_copy.cpp?rev=2594&view=auto
==============================================================================
--- trunk/test/query_copy.cpp (added)
+++ trunk/test/query_copy.cpp Wed Dec 23 12:54:02 2009
@@ -1,0 +1,105 @@
+/***********************************************************************
+ test/query_copy.cpp - Tests SQL query copies, to ensure that we copy
+       it deeply enough.
+
+ Copyright (c) 2009 by Educational Technology Resources, Inc.
+ Others may also hold copyrights on code in this file.  See the
+ CREDITS.txt file in the top directory of the distribution for details.
+
+ This file is part of MySQL++.
+
+ MySQL++ is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ MySQL++ is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+ License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with MySQL++; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+ USA
+***********************************************************************/
+
+#include <mysql++.h>
+
+#include <iostream>
+
+using namespace mysqlpp;
+using namespace std;
+
+
+static bool
+test_parm(const char* testname, Query& q1, Query q2, const char* parm)
+{
+       string s1 = q1.str(parm);
+       string s2 = q2.str(parm);
+       if (s1.compare(s2) == 0) {
+               return true;
+       }
+       else {
+               std::cerr << "TEST " << testname << " failed: " <<
+                               "s1('" << s1 << "') != " <<
+                               "s2('" << s2 << "')!" << std::endl;
+               return false;
+       }
+}
+
+
+static bool
+test_plain(const char* testname, Query& q1, Query q2)
+{
+       if (q1.str().compare(q2.str()) == 0) {
+               return true;
+       }
+       else {
+               std::cerr << "TEST " << testname << " failed: " <<
+                               "q1('" << q1.str() << "') != " <<
+                               "q2('" << q2.str() << "')!" << std::endl;
+               return false;
+       }
+}
+
+
+int
+main()
+{
+       try {
+               Query orig1(0); // don't pass 0 for conn parameter in real code
+               orig1 << "raw string insert method test";
+               Query copy1(orig1);
+               Query copy2(0); copy2 = orig1;
+
+               Query orig2(0, false, "string ctor test"); // don't do this, 
either
+               Query copy3(orig2);
+               Query copy4(0); copy4 = orig2;
+
+               Query orig3(0, false, "template %0 test");
+               orig3.parse();
+               Query copy5(orig3);
+               Query copy6(0); copy6 = orig3;
+
+               if (    test_plain("1a", orig1, copy1) &&
+                               test_plain("1b", orig1, copy2) &&
+                               test_plain("2a", orig2, copy3) &&
+                               test_plain("2b", orig2, copy4) &&
+                               test_parm("3a", orig3, copy5, "query") &&
+                               test_parm("3b", orig3, copy6, "query")) {
+                       return 0;
+               }
+       }
+       catch (const mysqlpp::Exception& e) {
+               std::cerr << "Query copy test failed: " << e.what() <<
+                               std::endl;
+       }
+       catch (const std::exception& e) {
+               std::cerr << "Unexpected exception: " << e.what() <<
+                               std::endl;
+       }
+
+       return 1;
+}
+


_______________________________________________
Mysqlpp-commits mailing list
[email protected]
https://mail.gna.org/listinfo/mysqlpp-commits

Reply via email to