00001 // database insert query class -*- C++ -*- 00002 // $Id: insert_query.cc,v 1.2 2004/04/02 22:44:54 roger Exp $ 00003 // 00004 // Copyright (C) 2003 Roger Leigh <rleigh@debian.org> 00005 // 00006 // 00007 // All rights reserved. 00008 // 00009 // Redistribution and use in source and binary forms, with or without 00010 // modification, are permitted provided that the following conditions 00011 // are met: 00012 // 00013 // * Redistributions of source code must retain the above copyright 00014 // notice, this list of conditions and the following disclaimer. 00015 // * Redistributions in binary form must reproduce the above 00016 // copyright notice, this list of conditions and the following 00017 // disclaimer in the documentation and/or other materials provided 00018 // with the distribution. 00019 // * Neither the name of the author, nor the names of other 00020 // contributors may be used to endorse or promote products derived 00021 // from this software without specific prior written permission. 00022 // 00023 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 00024 // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 00025 // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00026 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 00028 // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00029 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00030 // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00031 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00032 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 00033 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 00034 // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00035 // SUCH DAMAGE. 00036 // 00038 00039 #include <sstream> 00040 00041 #include <pqxxobject/insert_query.h> 00042 00043 using namespace pqxxobject; 00044 00045 insert_query::insert_query(): 00046 pqxxobject::query(), 00047 table_name(), 00048 field_list() 00049 { 00050 } 00051 00052 insert_query::insert_query(const std::string& table): 00053 pqxxobject::query(), 00054 table_name(table), 00055 field_list() 00056 { 00057 } 00058 00059 insert_query::insert_query(const insert_query& rhs): 00060 pqxxobject::query(*this), 00061 table_name(rhs.table_name), 00062 field_list(rhs.field_list) 00063 { 00064 } 00065 00066 insert_query::~insert_query() 00067 { 00068 } 00069 00070 void 00071 insert_query::remove(const pqxxobject::field_base& field) 00072 { 00073 for (std::list<field_value>::iterator iter = field_list.begin(); 00074 iter != field_list.end(); 00075 ++iter) 00076 { 00077 if (iter->first == field.get_column_name()) 00078 { 00079 iter = field_list.erase(iter); 00080 } 00081 } 00082 } 00083 00084 std::string insert_query::str() const 00085 { 00086 // Erase the previous query (if any). 00087 std::ostringstream qs; 00088 // Construct the new query. 00089 if (field_list.size() > 0) 00090 { 00091 qs << "INSERT INTO " << table_name << '('; 00092 for (std::list<field_value>::const_iterator iter = field_list.begin(); 00093 iter != field_list.end(); 00094 ++iter) 00095 { 00096 if (iter != field_list.begin()) 00097 qs << ", "; // For all but the first field. 00098 qs << iter->first; 00099 } 00100 qs << ") VALUES ("; 00101 for (std::list<field_value>::const_iterator iter = field_list.begin(); 00102 iter != field_list.end(); 00103 ++iter) 00104 { 00105 if (iter != field_list.begin()) 00106 qs << ", "; // For all but the first field. 00107 qs << iter->second; 00108 } 00109 qs << ')'; 00110 } 00111 return qs.str(); 00112 }