ADDED AUTHORS Index: AUTHORS ================================================================== --- /dev/null +++ AUTHORS DELETED Bakefiles.bkgen Index: Bakefiles.bkgen ================================================================== --- Bakefiles.bkgen +++ /dev/null @@ -1,15 +0,0 @@ - - - - ./mysql++.bkl - - - - - autoconf,msvc6prj,mingw - - - - -o$(INPUT_FILE_DIR)/Makefile.mingw - - Index: COPYING ================================================================== --- COPYING +++ COPYING @@ -1,10 +1,1 @@ -The MySQL++ library proper and the reference manual derived from -comments in the library source code are licensed under the GNU Lesser -General Public License. A copy is provided in this directory, in the -file LICENSE. - -The MySQL++ User Manual is licensed under a unique license derived from -the Linux Documentation Project License. (The only changes are due to -the fact that the User Manual isn't actually part of the LDP, so a lot -of the language in the LDPL doesn't make sense when applied to the user -manual.) This license is provided in the file doc/userman/LICENSE. +/usr/share/automake/COPYING ADDED COPYRIGHT Index: COPYRIGHT ================================================================== --- /dev/null +++ COPYRIGHT @@ -0,0 +1,23 @@ +The Mysql++ API is copyright 1998 by Kevin Atkinson and is released +under the LGPL license for now. + +The intent of doing this is allow developers to use my library to +develop commercial programs and to allow it it be distributed with +commercial databases. + +However if you do use it to develop a commercial program a small +donation to me would be greatly appreshated. Your donation will will +encourage me to continue to work on improving this API and also +encourage me to contune to keep it under the LGPL. Please send +donations too. + Kevin Atkinson + 7962 Helmart Dr. + Laurel, MD 20723 + +I reserve the right to change the license to future versions of the +library if I do not get suffecent pay-back to my work. However, it is +my promise to you that it will never become more restrictive than the +GPL (not LGPL) licence. + +You can contact me at kevinatk@home.com or (301) 498-3290 or at +7962 Helmart Dr./Laurel, MD 20723. DELETED CREDITS Index: CREDITS ================================================================== --- CREDITS +++ /dev/null @@ -1,85 +0,0 @@ -MySQL++ was created by Kevin Atkinson during 1998. From version 1.0 -(released in June 1999) through 1.7.9 (May 2001), the primary maintainer -was Sinisa Milivojevic . Neither Kevin nor Sinisa -are currently involved in MySQL++ development. The current maintainer -is Warren Young , starting with version 1.7.10 in -August of 2004. - -For a fuller account of the library's history, see the first chapter -of the user manual. For the nitty-gritty details, see the ChangeLog -in the root package directory. ChangeLog items since 1.7.9 that -aren't attributed to anyone else were done by Warren Young. - - -Other contributors of note since 1.7.10: - - Chris Frey : Lots of GCC warning fixes for - the bleeding-edge compiler versions, and Gentoo ebuild support. - Also, if there were a "steering committee" for MySQL++, he'd be - on it. - - Mark Meredino : Several fixes and - additions, including a lot of work on Microsoft Visual C++ - compatibility, and discoveries made while spelunking in the - library. - - Evan Wies : Contributed several C++ code - style cleanups. - - Arnon Jalon : Added the multi-query - result set handling features, and multiquery example to demonstrate - it. - - Korolyov Ilya has submitted several patches in many different - areas of the library. - - Remi Collet is maintaining offical - RPMs for Fedora, with other systems on the way. His work has - improved the RPM spec file we distribute greatly. - - Joel Fielder came up with the - original idea for Query::for_each() and Query::store_in(), - provided the basis for examples/for_each.cpp, and provided - a fix for exception flag propagation in Query. - - -Here are the personal credits from the old 1.7.9 documentation, -apparently written by Kevin Atkinson: - - Chris Halverson - For helping me get it to compile under Solaris. - - Fredric Fredricson - For a long talk about automatic conversions. - - Michael Widenius - MySQL developer who has been very supportive of - my efforts. - - Paul J. Lucas - For the original idea of treating the query object - like a stream. - - Scott Barron - For helping me with the shared libraries. - - Jools Enticknap - For giving me the Template Queries idea. - - M. S. Sriram - For a detailed dission of how the Template Queries - should be implemented, the suggestion to throw exceptions on bad - queries, and the idea of having a back-end independent query - object (ie SQLQuery). - - Sinisa Milivojevic - For becoming the new offical maintainer. - - D. Hawkins and E. Loic for their autoconf + automake contribution. - - -See the ChangeLog for further credits, and details about the differences -between the many versions of this library. - - -Please do not email any of these people with general questions about -MySQL++. All of us who are still active in MySQL++ development read the -mailing list, so questions sent there do get to us: - - http://lists.mysql.com/plusplus - -The mailing list is superior to private email because the answers are -archived for future questioners to find, and because you are likely to -get answers from more people. Index: ChangeLog ================================================================== --- ChangeLog +++ ChangeLog @@ -1,1942 +1,54 @@ -2.3.2, 2007.07.11 (r1669) - - o Previous release's const_string change caused more problems - than it fixed. This release contains the real fix. :) - - o New Connection::set_option() handling deals with the multi - statements option correctly again. examples/multiquery now - runs again as a result. - - o Added new unit testing script, called dtest. See the - HACKERS file for details. (This tool caught the previous - two problems!) - - o Squished a GCC pedantic warning. Thanks for the patch go to - Andrew Sayers. - - -2.3.1, 2007.07.10 (r1659) The "After the Fireworks" release - - o const_string objects now keep a copy of their data, not - just a pointer to it. This is less efficient, but necessary - to allow SSQLS to work with BLOBs. Without this, we were - seeing segfaults due to accessing freed memory pointed to - by the const_string, because the underlying object went - out of scope. - - o Fixed many more potential embedded null handling problems - in manip.h. - - o MySQL++ can now optionally reference MySQL C API headers as - being in a mysql subdirectory, a common thing on *ix systems, - by defining MYSQLPP_MYSQL_HEADERS_BURIED before #including - mysql++.h. - - o Restored ColData_Tmpl::get_string(), removed in v2.3.0, - along with warnings in the docs saying why you don't want - to use it, and what your alternatives are. - - o VC++ and MinGW builds now define the HAVE_MYSQL_SSL_SET - macro, which lets you use the C API's SSL features. - This assumes your C API library does actually have these - features enabled, which is the case with the official binary - releases on Windows. (Builds on *ix systems continue to - test for these features at configure time.) - - o Fixed simple examples-only Makefile generation, for RPMs. - - -2.3.0, 2007.07.02 (r1645) - - o Added Query::for_each() and Query::store_if() methods - proposed by Joel Fielder, and added examples for each. - - o It's now possible to store BLOB data in an SSQLS. It's not - foolproof, so added a section to the user manual (5.9) to - document the method. Also, changed examples/cgi_jpeg to use - this new mechanism, instead of the ugly "raw row data" method - it used to use. - - o Revamped Connection::set_option() handling. These options - used to be queued up, and applied only just before actually - establishing the connection. This made error reporting less - helpful because the diagnostic was separated from the cause. - Plus, the error messages were misleading to begin with. Now, - set_option() takes effect immediately if the connection is not - yet up (excepting one special option that can actually be set - after the connection is up) and issues better diagnostics when - it detects errors. - - o Connection::connect() used to set a few options in such a - way that the user couldn't override them. Now it's smart enough - to set them with the desired default values only when we see - that the user hasn't given them other values. - - o SQLString can now be initialized from a mysqlpp::null, - giving a "NULL" string. This is useful for template queries. - Patch by Michael Hanselmann. - - o resetdb error message about mixing library and header version - numbers is now more explicit. - - o Changed BadConversion exception's "what" message text to be - more like the other exceptions. The inconsistency lead one - to incorrectly copy-paste code from another exception handler, - expecting it to behave the same way. Now it does. - - o Added Row::raw_size(), as a shortcut for Row::at().size(). - - o ssqls-pretty now detects when it's being run from within - the MySQL++ distribution tree and gives a different -I flag - to the compiler, so that it picks up the distribution headers - instead of those that may be on the system already. - - o The quote manipulator now works for char[] correctly. - Thanks for this patch go to Andrew Sayers. (It's always - worked for char*, but C++ doesn't consider that to be the - same type, so it used the generic quote handling path, - which doesn't do anything for char[].) - - o Fixed a build bug on older Solaris versions where the - test for the C API library was erroneously failing, stopping - the configuration process. - - o Simplified mysql_shutdown() level argument detection. - Already had to do a version number ifdef check for the - Windows case, so there's really no point to doing it with - autoconf on Unixy platforms. Moved version number check - into lib/connection.cpp, and nuked the separate autoconf and - Windows tests. - - o Removed dependency of sql_types.h on myset.h and (indirectly) - datetime.h. Now we only define sql_* typedef aliases for those - MySQL++ types if the headers are included before sql_types.h. - - o Fixed a typo in one of the storein_sequence() template - overloads, which is apparently rarely (or never?) used, because - no one reported the compiler error you'd get if you tried. - - o Fixed a few more embedded null handling problems. - - o ColData used to keep two copies of all data it held. - Now it keeps just one. - - o Fixed install.bat script to track the unified Bakefile change - and the lack of separate debug and release builds under MinGW. - - o Yet another STLport + Query memory leak fix. - - o Squished a warning in newer GCCs having to do with identifier - shadowing. Patch by Jonathan Wakely. - - o Fixed a null-termination bug in Query::parse(). If you - somehow constructed a query string without a terminating null - character, then tried to parse it as a template query, it could - walk off the end of the string. Patch by Worster Chen. - - o Removed MYSQLPP_EXPORT tag from FieldNames and FieldTypes - class declarations, as this can cause problems in programs - that use vector in VC++. It has to do with multiply - defined templates, since these classes derive from that - template, and VC++ can't resolve the conflict without help. - Since these classes aren't actually used outside the library, - this shouldn't cause a problem. Patch by Nils Woetzel. - - o Partial fix to Doxygen PDF build on RHEL4 and 5. Needs - hand-coaxing to complete successfully on RHEL4, and doesn't - yet work at all on RHEL5. - - o Shortened the "no*" options to the bootstrap script, so that - the usage message fits on a single line. - - o Added "nodoc" bootstrap script option, for disabling the - documentation build during the dist target build. Allows for - building binary RPMs on CentOS 5.0, where doc building is - currently broken. - - o Removed the updel example program. It was kind of silly, - and if you were to rewrite it today, you'd use for_each() anyway. - - o Lots of documentation improvements. - - -2.2.3, 2007.04.17 (r1538) The "Tax Day" release - - o Previous version left examples/vstudio/* out of the tarball - by accident. - - o Improved generation of RPM temporary build directory path - name generation. Was using a hacked variant of the Fedora - Packaging Guidelines' second best choice. Now we're using - the choice they recommend most highly, without changes. - - o Removed unnecessary resources from vstudio/wforms example. - - o Minor URL fix in refman - - -2.2.2, 2007.04.13 (r1526) The "Nervousmaking Friday the 13th" release - - o More small fixes to embedded null handling in Query. - - o Fixed a bug in single-parameter template query handling. - - o Added tquery example, to demonstrate proper use of template - queries. Previously, resetdb was the only exemplar, and - it wasn't really suited for that. This example also tests - the previous item. - - o Added examples/vstudio/mfc, allowing us to improve the way - we demonstrate Unicode handling. Old way wasn't realistic. - On *ix, people will depend on the terminal code to handle - UTF-8. On Windows, users are almost certain to be writing - a GUI program, which requires different Unicode handling - than the old examples showed. - - o Removed explicit Unicode conversion stuff from command line - examples, and reworked the Unicode chapter in the user - manual. - - o Added examples/vstudio/wforms to show integration with - C++/CLI and Windows Forms. Documented this in README.vc. - - o Rewrote load_file and cgi_image examples to be more - useful, renaming them to load_jpeg and cgi_jpeg along - the way. Also, resetdb now creates a second table in the - sample database for these two examples' use. Also, added - examples/logo.jpg to the distribution as sample data for - these examples. - - o Limited the ostream base class casting stuff in Query to - VC++ 2003, which is the only platform that really needed it. - VC++ 2005 emits a warning with that hack in place, and on - other platforms it's just replicating work that the compiler - does already. - - o Added library version information to main library target - so that systems that version shared libraries work as - expected. Thanks for this patch go to Jack Eidsness. - - o Merged much of the diffs between Remi Collet's RPM spec file - into the official one. - - o Reorganized the doc subdir a bit. Generated HTML is now all - under doc/html instead of scattered under other subdirs, - and renamed doc/README.mysql++ to doc/README.manuals. - - o Improvements to top-level manual building make targets: - manuals now only rebuild at need, it's easier to request - a rebuild of all manuals, and we force a rebuild attempt - before building the distribution tarball so we don't ship - outdated manuals. - - o Added ability to run examples under gdb using exrun, - using same mechanism as we currently have for valgrind. - Thanks for this patch go to Michael Hanselmann. - - o Added "Important Underlying C API Limitations" chapter to the - user manual, to cover problems we keep seeing on the - mailing list that are the result of ignorance of the way - libmysqlclient behaves, not bugs MySQL++ is really in a - position to fix. - - -2.2.1, 2007.02.28 (r1433) - - o Fixed the new localtime() alternative selection code - for VS2003 and various uses of STLport. - - o No longer inserting a null character into the query stream - on calling one of the preview() functions. This was harmless - in v2.1, which used C strings more extensively, but began - causing problems in v2.2 due to its wider use of C++ strings. - - o Fixed a bug in the Connection copy ctor where it didn't - completely initialize the object. - - o Optimized Query::preview_char() a bit. Patch by Jonathan - Wakely. - - o Reordered directory list used by autconf when locating the - MySQL C API library. The list is now ordered with the - most likely locations for the library first, so we're less - distracted by incorrect libraries. This fixes a specific - build error under RHEL4 with recent versions of MySQL 5.0. - - -2.2.0, 2007.01.23 (r1417) - - o ColData, const_string, and SQLString can now be constructed - with an explicit length parameter. Furthermore, Query - class's execute(), store() and use() call chains terminate - in a version taking an explicit length parameter, instead - of one taking a simple C string. Together, this means - that it's now easier to handle data from the SQL server - containing nulls. The library is almost certainly not yet - capable of handling embedded nulls in all cases, but this - is a big first step towards that. - - o Can now construct a DateTime object from a time_t, and - convert a DateTime back to a time_t. Patch by Korolyov Ilya. - - o Changed the way we're handling exported functions in the - Windows DLL case so that it works more reliably under MinGW. - - o Added proper copy semantics to Connection, so that you get a - new connection with the same parameters, not just a bitwise - copy of the object. - - o Using an explicitly thread-safe variant of localtime() for - time conversions where one is available. - - o Removed ListInsert template from myset.h. This wasn't used - within the library, and was never documented, so I'm betting - that no one actually uses it. - - o Result::copy() was not copying the exception flag in - all cases. Fix by Steven Van Ingelgem. - - o Added exrun shell script and exrun.bat files to distribution, - to avoid linkage errors when running the examples while - you still have an older version of MySQL++ installed. - - o Renamed MYSQLPP_LIB_VERSION to MYSQLPP_HEADER_VERSION, as - what it really encodes is the version number in the mysql++.h - file you're using, not the actual library version number. - - o Added mysqlpp::get_library_version(), which returns the - library version number at build time. Between this and - the header version constant, you can check that you're not - mixing MySQL++ header and library versions. - - o resetdb example uses these new version number affordances to - double-check that you're not mixing libraries and headers - from different versions. This happens easily unless you - take care of it (such as by using exrun) when you have one - version of MySQL++ installed and you're trying to build and - test a new version without blowing away the old one first - or overwriting it. - - o No longer using recursive Makefiles on Unixy platforms - or split lib + examples project files on VC++. Everything is - handled by a single top-level Makefile or project file, which - is simpler for the end user, and makes better dependency - management possible. - - o When looking for the MySQL C library on systems using - autoconf, looking in .../lib64 wherever we are also looking - in .../lib. - - o RPM build process no longer depends on Bakefile. It means - you have to build the examples when building an RPM even - though they're never used within the RPM, but it's a better - tradeoff in my opinion. - - o Updated include and library paths on Windows to reflect - changes in the most recent MySQL installers. - - o Merged lib/defs.h and lib/platform.h into new file, - lib/common.h. Just cleans up the library internals. - - o Fixed build errors on Windows due to recent changes in MySQL. - - o Fixed a few memory leaks and double-deletes in Query class. - - o Fixed compatibility with STLPort's string implementation. - Patch by dengxy at cse.buaa.edu.cn. - - o Fixed a compatibility problem between Set<> template and - SSQLS. Patch by Korolyov Ilya. - - o Fixed build bug in SQLQueryParms due to a character - signedness issue on PowerPC with GCC. Patch by Michael - Hanselmann. - - o ~Transaction() can no longer throw exceptions. It'll just - quietly eat them, to avoid program termination. Fix - suggested by Alex Burton. - - o Fixed thread safety testing in autoconf case, accidentally - broken during v2.1.0 development cycle. - - o Using Doxygen 1.5.1 to generate documentation. - - -2.1.1, 2006.04.04 (r1289) - - o MinGW and Cygwin will now build and link to mysqlpp DLLs. - - o Fixed bug in Query, causing it to initialize the "throw - exceptions" flag incorrectly. Thanks for this patch go to - Joel Fielder. - - o Added -v flag for custom.pl script, which turns off the - multiply-defined static variable fix. Needed for VS 2003, - which doesn't support variadic macros. Also, added - a diagnostic to detect the need for the -v flag, and - suppressed the test for this feature in examples/util.cpp. - - -2.1.0, 2006.03.24 (r1269) - - o Converted automake and makemake files to their equivalents in - Bakefile format. - - o Added the Transaction class, which makes it easy to use - transaction sets in MySQL++. - - o Added xaction example to test new Transaction class. - - o Resetdb example now creates its example table using the - InnoDB storage engine, in order to test the new transaction - support. Resetdb also declares the table as using UTF-8 - text; this doesn't change anything, but it does correctly - document what we're doing. - - o Added sql_types.h header, containing C++ typedefs - corresponding to each MySQL column type. Using those new - types in the type_info module, and in the SSQLS examples. - - o Replaced the way we were handling the template query - version of Query member functions, to allow an arbitrary - number of template query parameters. By default, we - now support 25 parameters, up from the old limit of 12. - It's now possible to change just one number, run a script, - and have a new limit. - - o Connection class does a better job of returning error - messages if you call certain member functions that depend - on a connection to the server before the connection is - established. - - o Updated libmysqlclient.def for newer versions of MySQL. (Fixes - build errors having to do with mysql_more_results() and - mysql_next_result(). - - o Replaced final use of strcpy() with strncpy(). - - o custom.pl now runs without complaint in strict mode, with - warnings turned on. Thanks for this patch go to "Waba". - - o Fixed a bug in custom.pl where incorrect code would be - generated for some SSQLS set() methods. Thanks for this - patch go to "Waba". - - o SSQLS structures now support long and unsigned long fields. - Thanks for this patch go to "Waba". - - o It's now possible to put SSQLS definitions in a header - file used by multiple modules in a program without - getting multiple static member definition errors. See the - documentation for details. Thanks for this patch go to - Viktor Stark. - - o Moved the definition of the 'stock' SSQLS out of the - custom*.cpp example files and into a new stock.h file. - Also, #including that file in the util module to test out - the new SSQLS multiple static definition fix. - - o Using all of the digits of precision guaranteed by the - IEEE 754 spec when stringizing floating point numbers - to build queries. Previously, we would use the platform - default, which can be as few as 6 digits. - - o Removed lib/compare.h. Not used within the library, never - documented, and nobody seems to want to defend it. - - -2.0.7, 2005.11.23 (r1147) - - o Added explicit mysqlpp namespace qualifiers to generated code in - custom*.h so you can use SSQLS in places where it doesn't make - sense to say "using namespace mysqlpp" before the declaration. - Also updated some of the examples to not have this "using" - declaration to make it clear to users that it isn't needed, if you - want to use explicit namespace qualifiers as well. Thanks for - this patch to Chris Frey. - - o Removed an apparently useless unlock() call from ResUse; there is - no nearby lock() call, so if this unlock() is in fact necessary, - it shouldn't be here anyway, because the two calls should be - nearby each other. Thanks for this patch to Chris Frey. - - o Fixed Query ostream initialization bug affecting SunPro CC (at - least). While this bug violates the Standard, it doesn't affect - many real compilers because they don't enforce this rule. Fixed - by Chris Frey. - - o Previously, we only used the C99 style "long long" support when - building under GNU CC. This is now the default. This should - allow the code to work under SunPro CC. - - o Added another dynamic cast needed for proper Query ostream - subclass overloading under VC++. (7.1 at least...) - - o Detecting whether MySQL is built with SSL support on platforms - using autotools. Needed on some old Sun systems, for instance. - Thanks for this patch to Ovidiu Bivolaru. - - o Fixed a potential memory bug in ColData's conversion to SQL null. - - o Many minor packaging tweaks. (README clarifications, file - permission fixes, better adherence to GNU packaging standards, - etc.) - - -2.0.6, 2005.09.28 (r1123) - - o Fixed makemake.bat so it works on cmd.exe, not just 4NT. - - o Documentation fixes. - - -2.0.5, 2005.09.13 (r1114) - - o Visual C++ build now requires GNU make. It is tested to work - with either the Cygwin or the MinGW versions. The previous - version of MySQL++ used nmake. This change enabled the - following features: - - o Debug and Release versions are both built into - separate subdirectories. - - o Dependency tracking for release version works - correctly now. (Previously dependencies worked - only for debug version.) - - o 'make clean' removes release version binaries - in addition to debug versions. - - o MinGW makemake support updated to support new release/debug - subdirectory system. This is probationary support, since - this code currently can't be built as a DLL. As a result, - it is no more useful than the Cygwin version, for licensing - reasons. - - o Several fixes to allow building on Solaris 8. These fixes may - also help on other SVR4-derived systems. - - o Removed Borland C++ makemake support, because this version - of the library does not work completely, and there seems - to be almost no user interest in fixing it. - - o Clarified "Handling SQL Nulls" section of user manual's - Tutorial chapter. - - -2.0.4, 2005.08.29 (r1076) - - o Made mysql_shutdown() second parameter autoconf check less - sensitive to compiler pedantry. - - o VC++ library Makefile is now smart enough to re-create the - import library, if it is deleted while leaving the DLL alone. - - o Added libmysqlclient.def to tarball. - - o Reworked most of the top-level README* files. - - o Renamed LGPL file to LICENSE. - - -2.0.3, 2005.08.25 (r1060) - - o Visual C++ makemake system updated to build both debug and - release versions of library DLL. - - o Fixed bug in simple1 example that caused crashes on Windows. - - o Doing UTF-8 to ANSI text translation in simple examples now. - - o Previous two releases built libmysqlpp with wrong soname on - autotools-based systems. Fixed. - - -2.0.2, 2005.08.18 (r1050) - - o Fixes to makemake system for cmd.exe. - - o Fixed the case where the system's C++ library includes an slist - implementation in namespace std. - - -2.0.1, 2005.08.17 (r1046) - - o Added new simple1 example, showing how to retrieve just one - column from a table. Old simple1 is now called simple2, and - simple2 is likewise shifted to simple3. - - o Added custom6 example, showing how to do the same thing with - SSQLS. - - o Updated user manual to cover new examples. - - o Was accidentally shipping Subversion crap with tarball. Fixed. - - -2.0.0, 2005.08.16 (r1031) The "Excess Hair Removal" release - - THIS IS NOT A DROP-IN REPLACEMENT FOR MySQL++ v1.7! - - At minimum, you will have to recompile your program against - this library. You may also have to make code changes. - Please see the "Incompatible Library Changes" chapter of - the user manual for a guide to migrating your code to this - new version: - - http://tangentsoft.net/mysql++/doc/userman/html/breakages.html - - o The library's shared object file name (soname) scheme has - changed. (This mainly affects POSIX systems.) - - The soname for the last 1.7.x releases of MySQL++ was - libmysqlpp.so.4, meaning the fourth version of the library's - application binary interface (ABI). (The first ABI version - in this scheme was that provided by 1.7.9.) MySQL++ - 2.0.0's soname is libmysqlpp.so.2.0.0. Since the dynamic - linker setup on some systems will create a symlink to - that file called libmysqlpp.so.2, it's possible that this - library could be confused with that for MySQL++ 1.7.19 - through .21, which also used this number. Do not install - this library on a system which still has binaries linked - against that version of the library! - - The new scheme is {ABI}.{feature}.{bug fix}. That is, - the first number changes whenever we break the library's - binary interface; the second changes when adding features - that do not break the ABI; and the last changes when the - release contains only internal bug fixes. This means - that we will probably end up with MySQL++ 3.0 and 4.0 at - some point, so there will be further soname conflicts. - Hopefully we can put these ABI changes off long enough - to avoid any real problems. - - o autoconf now installs headers into $prefix/include/mysql++, - instead of $prefix/include. If you were using the - --includedir configure script option to get this behavior - before, you no longer need it. - - o Linux binary RPMs will henceforth include only the - libmysqlpp.so.X.Y.Z file, and create any short names - required, to allow multiple versions to be installed at - once. Currently, you cannot install two MySQL++ library - RPMs at once, because they both have /usr/lib/libmysqlpp.so.X, - for instance. - - o Replaced the Visual C++ and Borland C++ project files with - a new "makemake" system, which creates Makefiles specific - to a particular toolchain. This new mechanism also supports - MinGW and generic GCC-on-*ix. This was done partly to reduce - the number of places we have to change when changing the - file names in MySQL++ or adding new ones, and partly so we're - not tied to one particular version of each of these tools. - - o VC++ Makefiles create a DLL version of the library only - now, so there's no excuse for LGPL violations now. - This same mechanism should make DLL builds under other - Windows compilers easy. - - o Added Connection::enable_ssl(), which enables encrypted - connections to the database server using SSL. - - o Connection::create_db() and drop_db() now return true on - success, not false. - - o Connection::create_db() and drop_db() use Query::exec() - now, for efficiency, rather than Query::execute(). - - o Removed Connection::infoo(). Apparently just there to - save you from a typo when calling the info() method, since - it was a mere alias. - - o Renamed Connection::real_connect() to connect(), gave - several more of its parameters defaults, and removed old - connect() function. Then changed user manual and examples - to use new APIs. - - o Replaced Connection::read_option() with new set_option() - mechanism. The name change matches the method's purpose - better. Functional changes are that it returns true on - success instead of 0, it supports a broader set of options - than read_option() did, and it enforces the correct option - argument type. - - o You can now call Connection::set_option() before the - connection is established, which will simply queue the option - request up until the connection comes up. If you use this - feature, you should use exceptions, because that's the only - way an option setting failure can be signalled in this case. - - o Removed query-building functions (exec*(), store*(), - use()) from class Connection, and moved all the implementation - code to class Query. Query no longer delegates the final - step of sending the query to the database server to - Connection(). - - o Added Connection::enable_ssl(), for turning on SSL support on - a connection. - - o Extracted exception disabling mechanism out of the many - classes that had the feature into a new OptionalExceptions - base class, which all classes having this feature now - derive from. Also, removed all per-method exception - handling flags. Finally, added NoExceptions class. With - all of these changes, there is now a common way to disable - exceptions with fine granularity on all objects that - support the feature. - - o All custom MySQL++ exceptions now derive from the new - Exceptions class. This regularizes the exception interface - and allows you to use a single catch() block if you want. - - o The "throw exceptions" flag is passed from parent to child - in all situations now. (Or if not, please report it as - a bug.) This fulfills a promise made in the v1.7.9 user - manual, with the cost being that some programs will see - new exceptions thrown that they're not expecting. - - o Added a bunch of new exception types: BadOption, - ConnectionFailed, DBSelectionFailed, EndOfResults, - EndOfResultSets, LockFailed, and ObjectNotInitialized. - Some of these replace the use of BadQuery, which in v1.7.x - was a kind of generic exception, thrown when something more - specific wasn't available. Beware, this means that programs - may start crashing after recompiling them under v2.0 due to - uncaught exceptions, if they were only trying to catch BadQuery. - - There are additional instances where the library will - throw new exceptions. One is when calling a method that - forces the internals to use an out-of-bounds index on a - vector; previously, this would just make the program - likely to crash. Another is that the library uses the - BadFieldName exception -- created in v1.7.30 -- in more - apropos situations. - - o Renamed SQLQueryNEParms to BadParamCount, to match naming - style of other concrete exception types. - - o Extracted lock()/unlock() functions from Connection and - Query classes into a new Lockable interface class. Locking - is implemented in terms of a different class hierarchy, Lock, - which allows multiple locking strategies with a single ABI. - - o Removed ResUse::eof(). It's based on a deprecated MySQL - C API feature, and it isn't needed anyway. - - o Removed arrow operator (->) for iterator returned by Fields, - Result and Row containers. It was inherently buggy, because - a correct arrow operator must return the address of an - object, but the underlying element access functions in these - classes (e.g. at()) return objects by value, of necessity. - Therefore, this operator could only return the address of - a temporary, which cannot be safely dereferenced. - - o Returned Row subscripting to something more like the - v1.7.9 scheme: there are two operator[] overloads, one for an - integer (field by index) and another for const char* (field - by name). lookup_by_name() has been removed. Because row[0] - is ambiguous again, added Row::at() (by analogy with STL - sequence containers), which always works. - - o Collapsed two of the Row::value_list*() overloads into - two other similar functions using default parameters. - This changes the API, but the removed functions aren't - used within the library, and I doubt they are used outside, - either. - - o Merged RowTemplate into Row. - - o Merged SQLQuery class into Query class. - - o Query is now derived from std::ostream instead of - std::stringstream, and we manage our own internal string - buffer. - - o Moved SQLParseElement and SQLQueryParms into their own - module, qparms. - - o Added multiple result set handling to Query. MySQL 4.1 - and higher allow you to give multiple SQL statements in a - single "store" call, which requires extensions to MySQL++ - so you can iterate through the multiple result sets. Also, - stored procedures in MySQL 5.0 reportedly return multiple - result sets. Thanks for the initial patch go to Arnon Jalon; - I reworked it quite a bit. - - o Query::storein*() now supports more varieties of the - nonstandard slist comtainer. (Singly-linked version of - STL std::list.) - - o Template query mechanism and user manual had several - mismatches. Made manual match actual behavior, or - made library match documented behavior, as apropriate. - Initial patch by Jürgen MF Gleiss, with corrections and - enhancements by Warren Young. - - o Collapsed mysql_* date and time base classes' methods and - data into the subclasses. Also, DateTime no longer derives - from Date and Time; you could get away with that in the - old hierarchy, but now it creates an inheritance diamond, - and allows unsupported concepts like comparing a Time to - a DateTime. - - o Removed "field name" form of Row::field_list(). It was - pretty much redundant -- if you have the field names, why - do you need a list of field names? - - o ColData can convert itself to bool now. Thanks for this - patch go to Byrial Jensen. - - o Removed simp_list_b type; wasn't being used, and doesn't - look to be useful for end-user code. - - o Several methods that used to take objects by value now - do so by const reference, for efficiency. - - o Several variable and function renamings so that MySQL++ - isn't needlessly tied to MySQL. Even if we never make - the library work with other database servers, there's - little point in tying this library to MySQL blindly. - - o Renamed all private data members of MySQL++ classes to - have trailing underscores. - - o 'private' section follows 'public' section in all classes - now. - - o Removed mysql++.hh and sqlplus.hh backwards-compatibility - headers. - - o Added copy ctors to Date/Time classes so that they will - work in SSQLS under GCC 4.0.0. Without these, the compiler - couldn't make the conversion from raw MySQL row data. - - o Fixed a bunch of GCC 4.0 pedantic warnings: added virtual - dtors to all base classes, calling base class ctors from leaf - classes, etc. - - o All warnings fixed under VC++ at warning level 3. (Mostly - harmless signedness and integer conversion stuff.) - - o Updated LGPL license/copyright comments at the top of - several files to use FSF's new physical address. - - o Relicensed user manual under a close variant of the Linux - Documentation Project License, as it's designed for - documentation, which the LGPL is not. Permission for this - received from Kevin Atkinson and MySQL AB. - - o Added ABI and API breakages chapter to user manual. It - is basically a subset of this ChangeLog, with only the - information an end-user must know when migrating between - versions. - - o Reworked user manual's DocBook code quite a bit after - reading Bob Stayton's book "DocBook XSL" 3/e. Better handling - of stylesheets, taking advantage of some superior DocBook - features, prettier output (especially the HTML version), etc. - - o Rewrote doc/userman/README to make it clearer how to get - started contributing to the user manual. It's essentially a - "getting started with DocBook" guide now! - - o Lots of small text improvements to user and reference - manuals. Aside from the obvious tracking of library changes, - made a bunch of minor style and clarity improvements. - - o Added CSS stylesheets for userman and refman to - make the HTML versions of each a) not ugly; and b) match - tangentsoft.net. (Yes, some may say that these are incompatible - goals....) - - o Standardized exception handling code in the examples that - use it. - - o Fixed a potential memory leak due to exceptions thrown from - ResUse. Thanks for this patch go to Chris Frey. - - o Using new "no exceptions" feature of library in simple1 - example, so it is now truly simple. - - o simple1 example no longer depends as much on util module, so - that all of the important code is in one place. Makes - learning MySQL++ a little less intimidating. - - o Added new simple2 and usequery examples, to demonstrate - the proper way to handle a "use" query, with exceptions - disabled, and not, respectively. Added them to the user - manual, in the appropriate place. - - o Refactored the "print stock table" example functions - again, to make code using them clearer. - - o UTF-8 to UCS-2 handling in examples is now automatic on - Windows. - - o Removed debug code from Windows Unicode output examples - that slipped into previous release. - - o resetdb example is now clearer, and more robust in the - face of database errors. - - o Simplified connect_to_db() in examples' util module. - - o Added sample autoconf macro for finding MySQL++ libraries, for - people to use in their own autotools-based projects. - - o Lots and lots of minor cleanups not worth mentioning - individually... - - -1.7.40, 2005.05.26 (r719) - - o Multiple item form of insert() now works if you're using the - SQLQuery class, or its derivative, Query. Thanks to Mark - Meredino for this patch. - - o Fixed a bug in const_string::compare(), in which MySQL++ - would walk off the end of the shorter of the two strings. - All was well if the two were the same length. - - o ResUse::operator=() now fully updates the object, so it's more - like the behavior of the full ctor. - - o All source files now contain a license and copyright statement - somewhere within them. - - o Optimized mysql++.h a bit: it now #includes only the minimum set - of files required, and there is now an idempotency guard. - This improves compile times a smidge, but mainly it was - done to clean up the generated #include file graph in the - reference manual. Before, it was a frightful tangle because - we #included everything except custom*.h. - - o Constness fix in MySQL++ date/time classes to avoid compiler - warnings with SSQLS. Thanks to Wolfram Arnold for this patch. - - o Fixed some compiler warnings in custom*.h. Thanks to Chris Frey - for this patch. - - o Added "Submitting Patches" and "Maintaining a Private CVS - Repository" sections to the HACKERS file. Thanks to Chris - Frey for the source material for these sections. The HACKERS - file was improved in several other ways at the same time. - - o PDF version of user manual no longer has links to the reference - manual. They were ugly, and they were broken anyway due to the - way we move the PDFs after generating them. If you want - interlinked manuals, use the HTML version. - - o PDF version of user manual now has hard page breaks between - chapters. - - o Removed complic1 example. Wasn't pulling its own weight. - Everything it is supposed to demonstrate is shown in other - examples already. - - o Refactored print_stock_table() in examples/util module to be - four functions, and made all the examples use various of - these functions where appropriate. Before, several of - the examples had one-off stock table printing code because - print_stock_table() wasn't exactly the right thing, for one - reason or another. One practical problem with this is that - some of the examples missed out on the recent Unicode updates; - now such a change affects all examples the same way. - - o Since so many of the examples rely on the util module, the user - manual now covers it. The simple1 example in the user manual - didn't make much sense before, in particular, because it's - really just a driver for the util module. - - o Added custom5 example. It shows how to use the equal_list() - functionality of SSQLS. Thanks to Chris Frey for the original - version of this program. (I simplified it quite a bit after - accepting it.) - - o New user manual now covers the value_list(), equal_list() and - field_list() stuff that the old manual covered but which was - left out in previous versions of the new manaul. Most of the - examples are the same, but the prose is almost completely new. - This new section includes the custom5 example. - - o Every declaration in MySQL++ is now documented in the reference - manual, or explicitly treated as "internal only". - - o Improved docs for MySQL++'s mechanism to map between MySQL - server types and C++ types. Initial doc patch by Chris Frey, - which I greatly reworked. - - o Improved a lot of existing reference manual documentation while - adding the new stuff. - - o Expanded greatly on the exception handling discussion in the user - manual. - - o Added all-new "Quoting and Escaping" section to the user - manual's Tutorial chapter. Moved some existing comments on - quoting and escaping around and added some new ones to other - sections as a result. - - o Added all-new "Handling SQL Nulls" section to the user manual's - Tutorial chapter. - - o Many improvements to the Overview section of the user manual. - - o Row::operator[] reference now explains the right and wrong way to - use the values it returns. This is in response to a mailing list - post where someone was incorrectly using this feature and getting - a bunch of dangling pointers. - - o Updated Doxyfile so 1.3.19.1 parses it without warnings. Still - works with versions back to 1.2.18, at least. (These are - the versions shipped with Fedora Core 3 and Red Hat Linux 9, - respectively.) - - o Using a superior method to make Doxygen ignore certain sections - of the source code. Between this change and the fact that - everything not so ignored is documented, Doxygen no longer - generates any warnings. - - o Lots of code style updates. Everything should now be consistently - formatted. - - -1.7.35, 2005.05.05 (r601) The "Cinco de Mayo" release - - o Added a "how to use Unicode with MySQL++" chapter to the user - manual. (Too bad "Cinco de Mayo" doesn't have any accented - characters. That would be just _too_ precious.) - - o VC++ examples now use the Unicode Win32 APIs, so they can display - Unicode data from MySQL++. - - o Added an optional conversion function to examples/util.cpp to - handle the conversion from UTF-8 to UCS-2 on Win32. - - o Moved "brief history of MySQL++" from intro section of refman to - intro section of userman. - - o Lots of small bits of documentation polishing. - - o Made some minor constness fixes. Thanks to Erwin van Eijk - for this patch. - - o Made some warning fixes for GCC 4.0. Not all warnings are - fixed, because some of the needed changes would break the ABI. - Thanks to Chris Frey for this patch. - - o Added lib/Doxyfile to distribution. - - -1.7.34, 2005.04.30 (r573) - - o Added a multiple-insert method for Query, which lets you insert - a range of records from an STL container (or the whole thing, - if you like) in a single SQL query. This is faster, and it - reduces coding errors due to less repetition. Thanks to Mark - Meredino for the patch. - - o Reference and user manual now get rebuilt automatically when - required. (E.g. on 'make dist', or explicitly now through 'make - docs'.) - - o Made it easier to change the maximum number of SSQLS data members - in generated custom-macros.h file. It used to be hard-coded in - several places in lib/custom.pl; now it's a variable at the top of - the file. - - o Changed default SSQLS data member limit to 25, which is what it - has been documented as for a long time now. It was actually 26 - within custom.pl. - - o Fixed a regression in previous version. - - o Trimmed some fat from the distribution packages. - - o Some more small doucmentation improvements. - - -1.7.33, 2005.04.29 (r555) - - o Worked around an overloaded operator lookup bug in VC++ 7.1 - that caused SSQLS insert, replace and update queries to get - mangled. (Symptom was that custom2 and custom3 examples didn't - work right.) Thanks to Mark Meredino for digging up the - following, which explains the problem and gives the solution: - - http://groups-beta.google.com/group/microsoft.public.vc.stl/browse_thread/thread/9a68d84644e64f15 - - o Some VC++ warning fixes. - - o Major documentation improvements: - - o Using DocBook for user manual and Doxygen for reference - manual. The former now references the latter where - useful. - - o Split out HACKERS and CREDITS files from main README, - and improved remaining bits of README. - - o Moved the text from the old v1.7.9 LaTeX-based - documentation over into the new systems, and reworked - it to more closely resemble English. - - o Added a lot of new material to documentation, and - simplified a lot of what already existed. - - o Documentation is now being built in HTML and PDF forms. - - o ebuild file updated to take advantage of recent configure script - features. Thanks to Chris Frey for this patch. - - - -1.7.32, 2005.03.10 (r479) - - o Example building may now be skipped with --disable-examples - configure script flag. - - o Changed stock items added in resetdb. One is now UTF-8 encoded, - to show that basic use of Unicode with MySQL++ is easy, yet not - foolproof. (See formatting of table on systems where cout isn't - UTF-8 aware!) Other stock items now follow a theme, for your - amusement. :) - - o custom3 example now changes UTF-8 item's name to the 7-bit ASCII - equivalent. Previously, this example would fix a spelling error - in the table. - - o resetdb example now says 'why' when it is unable to create the - sample database. - - o Small formatting change to print_stock_table(), used by several - examples. - - o Was issuing a VC++-specific warning-disable pragma when built by - any Windows compiler. Fixed. - - -1.7.31, 2005.03.05 (r462) The "Inevitable Point-one Followup" release - - o Check for threads support must now be explicitly requested via - configure script's new --enable-thread-check flag. - - o Fix for contacting MySQL server on a nonstandard port number. - Thanks to Chris Frey for this patch. - - o Example programs using standard command line format now accept a - fourth optional parameter, a port number for the server. Thanks - to Chris Frey for this patch. - - o One more g++ 3.4 pedantic warning fix by Chris Frey. - - o Exception handling in resetdb is no longer nested, because you'd - get a segfault on some systems when an exception was thrown from - one of the inner try blocks. - - o Improvements to Connection class's handling of locking mechanism. - Concept based on patches by Rongjun Mu. - - o Implemented the declared-but-never-defined Query::lock(). Thanks - to Rongjun Mu for this patch. - - o Cleaned up some unclear if/else blocks in connection.cpp by - adding explicit braces, correct indenting and putting normal - code path in the if side instead of the else. - - -1.7.30, 2005.02.28 (r443) The "Power of Round Numbers" release - - o bootstrap script now accepts a 'pedantic' argument, which sets a - bunch of CFLAGS that make g++ very picky about the code it - accepts without warnings. - - o Fixed a bunch of things that generated warnings with g++ in - pedantic mode. Only two warnings remain, having to do with - floating point comparisons. (See Wishlist for plans on how to - deal with these.) Thanks to Chris Frey for this patch. - - o Split long tests out of configure.in into M4 files in new config - subdir. This makes configure.in easier to read. - - o Added preliminary thread support. Currently, this just means that - we detect the required compiler and linker thread flags, and link - against the proper thread-safe libraries. THERE MAY BE - UN-THREAD-SAFE CODE IN MYSQL++ STILL! - - o Standard C++ exceptions are the default now. Old pre-Standard - exception stuff removed. - - o Row::lookup_by_name() will throw the new BadFieldName exception if - you pass a bad field name. Thanks for this patch to Chris Frey. - - o Row::operator[] will throw a Standard C++ out of bounds exception - by way of std::vector::at() if you pass it a bad index. Thanks - for this patch to Chris Frey. - - o Setting Connection::is_connected flag to false on close(). - Previously, is_connected() would continue to return true after - close() was called. - - o All number-to-string conversion ctors in SQLString class now use - ostringstream to do the conversion. Previously, we used - snprintf(), which isn't available on all systems. Also, we used a - C99 format specifier for the "long long" conversion, which is also - not available on all systems. This new ostringstream code should - be platform-independent, finally. - - -1.7.28, 2005.02.04 (r403) - - o --with-mysql* flags to configure script now try the given - directory explicitly, and only if that fails do they try - variations, like tacking '/lib' and such onto it to try and find - the MySQL includes and libraries. Thanks to Matthew Walton for - the patch. - - o Finally removed sql_quote.h's dependence on custom.h, by moving - the one definition it needed from custom.h to deps.h. This will - help portability to compilers that can't handle the SSQLS macros, - by making that part of the library truly optional. - - -1.7.27, 2005.01.12 (r395) - - o configure check for libmysqlclient now halts configuration if the - library isn't found. Previously, it would just be flagged as - missing, and MySQL++ would fail to build. - - o Added sql_string.cpp to VC++ and BCBuilder project files. - - o Removed Totte Karlsson's 'populate' example, which never made it - into the distribution anyway. - - o Removed last vestiges of 'dummy.cpp'. - - o Renamed *.cc to *.cpp in BCBuilder project files. - - o Worked around a BCBuilder C++ syntax processing bug in row.h. - - -1.7.26, 2004.12.17 (r382) - - o Moved all of the SQLString definitions out of the header and into - a new .cpp file, reformatted it all, and made the integer - conversion functions use snprintf() or _snprintf() instead of - sprintf(). Also, widened some of the buffers for 64-bit systems. - - o Using quoted #include form for internal library headers, to avoid - some problems with file name clashes. (The headers should still - be installed in their own separate directory for best results, - however.) Thanks to Chris Frey and Evan Wies for the patch and - the discussion that lead to it. - - o Removed unnecessary semicolons on namespace block closures. - Thanks to Evan Wies for this patch. - - o Fixed namespace handling in the legacy headers mysql++.hh and - sqlplus.hh. Thanks to Chris Frey for this patch. - - o #including iostream instead of ostream in lib/null.h for - broader C++ compatibility. (This may allow MySQL++ to work on GCC - 2.95.2 again, but this is unconfirmed.) - - o Detecting proper mysql_shutdown() argument handling automatically - in platform.h for the Windows compiler case instead of making the - user edit the file. Thanks to Evan Wies for this patch. - - o Fixed examples/Makefile.simple to use new *.cpp file naming. - - o Fix to Gentoo ebuild file's exception configure switch handling. - Thanks to Chris Frey for this patch. - - o Rebuilding lib/custom*.h intelligently now, to avoid unnecessary - recompiles after running bootstrap script. - - -1.7.25, 2004.12.09 (r360) - - o Yet more fixes to the --with-mysql-lib and --with-mysql-include - flags. - - o Added DLLEXPORT stuff to platform.h, hopefully so that someone - can figure out how to make VC++ make a DLL version of MySQL++. - - o Renamed *.cc to *.cpp. - - o Made 'set -> myset' change in VC++ project files. - - o Some style changes (mostly whitespace) in header files. - - -1.7.24, 2004.12.08 (r343) - - o Fixed the --with-mysql-lib and --with-mysql-include flags' - behavior, and extended their search ability to handle one other - common case. (Fixed by Steve Roberts) - - o Fixes to put freestanding functions in namespace mysqlpp. (They - weren't in the namespace, while all the class member functions - were.) This required bumping the ABI version number to 4. - - o Renamed set module to myset, to avoid conflicts with Standard C++ - Library's set.h when MySQL++ headers were installed into one of - the standard system include directories. - - o Renamed all the idempotency guards to make them consistent in - style and unique to MySQL++. - - o Reformatted all of lib/*.cc. - - -1.7.23, 2004.11.20 (r333) - - o Query::reset() now empties the stored query string. If you - subsequently stored a longer query in the object, you'd overwrite - the previous query, but otherwise the longer part of the previous - one would stick out past the new query. - - o We now look to the NO_LONG_LONGS macro only to decide whether to - fake 64-bit integer support using 32-bit integers. - - o 64-bit integer support under Visual C++ may be working now, using - that platform's __int64_t type. This has not been tested. - - o Removed 64-bit integer support for Codewarrior on Mac OS 9 and - earlier. OS X uses GCC, so it requires no special support. - - o Added MinGW detection in platform.h. - - o If you pass a flag (-X) to the examples that take the standard - parameters (resetdb, simple1, etc.), it prints a usage message. - - o Better error handling in resetdb example, where errors are the - most critical. (If that one runs without errors, the others - probably will, too, and you have to run that one first.) - - o resetdb now reports success, rather than succeeding silently. - - o Removed the code in sample1 example that duplicated util module's - print_stock_table(), and called that function instead. - - o Moved the preview() calls in the example programs to before the - query execution calls, because execution modifies the query. - - o All examples that take the standard command line parameters now - exit when connect_to_db() fails in one of the ways that don't - throw an exception, rather than bulling onward until the next - MySQL database call fails because the connection isn't up. - - o dbinfo example now takes the standard command line parameters. - - o Much better output formatting in dbinfo example. - - o Calling reset() where appropriate in the various example programs. - Before, the programs may have worked, but not for the right - reason. This lead some people to believe that calling reset() - was not necessary. - - o Fixed an incorrect use of row["string"] in complic1 example. - - o Lots of code style improvements to the examples. - - o Some VC++ type warnings squished. Some remain. - - -1.7.22, 2004.11.17 (r302) - - o Applied patches by Zahroof Mohammed to allow it to build under GCC - 3.4.2. Tested on MinGW and Fedora Core 3 systems. - - o Removed all the forward declarations in defs.h, and added - forward declarations where necessary in individual header files. - #including defs.h in fewer locations as a result. - - o Legacy headers sqlplus.hh and mysql++.hh now declare they are - using namespace mysqlpp, to allow old code to compile against the - new library without changes. - - o Removed query_reset parameter from several class Query member - functions. In the implementation, these parameters were always - overridden! No sense pretending that we pay attention to these - parameters. This changes the ABI version to 3. - - o #including custom.h in sql_query.h again...it's necessary on GCC - 3.4. - - o bootstrap script runs lib/config.pl after configure. This is - just a nicety for those running in 'maintainer mode'. - - -1.7.21, 2004.11.05 (r273) - - o Generating a main mysql++ RPM containing just the library files - and basic documentation, and the -devel package containing - everything else. - - o Devel package contains examples now, along with a new Makefile - that uses the system include and library files, rather than the - automake-based Makefile.am we currently have which uses the files - in the mysql++ source directory. - - o Renamed sqlplusint subdirectory in the package to lib. - - o Removed the obsolete lib/README file. - - o lib/sql_query.h no longer #includes custom.h, simplifying - build-time dependencies and shortening compile times. - - -1.7.20, 2004.11.03 (r258) - - o Collapsed all numbered *.hh headers into a single *.h file. For - example, the contents of row1.hh, row2.hh and row3.hh are now in - row.h. - - o While doing the previous change, broke several circular - dependencies. (The numbered file scheme was probably partly done - to avoid this problem.) The practical upshot of most of these - changes is that some functions are no longer inline. - - o Removed define_short.hh and everything associated with it. The - library now uses the short names exclusively (e.g. Row instead of - MysqlRow). - - o Put all definitions into namespace mysqlpp. For most programs, - simply adding a 'using namespace mysqlpp' near the top of the - program will suffice to convert to this version. - - o Once again, the main include file was renamed, this time to - mysql++.h. Hopefully this is the last renaming! - - o mysql++.hh still exists. It emits a compiler warning that the - file is obsolete, then it #includes mysql++.h for you. - - o sqlplus.hh is back, being a copy of the new mysql++.hh. Both of - these files may go away at any time. They exist simply to help - people transition to the new file naming scheme. - - o Renamed mysql++-windows.hh to platform.h, and added code to it to - handle #inclusion of config.h on autotools-based systems - intelligently. This fixes the config.h error when building under - Visual C++. - - o There is now only one place where conditional inclusion of - winsock.h happens: platform.h. - - o Beautified the example programs. - - -1.7.19, 2004.10.25 (r186) - - o Fixed an infinite loop in the query mechanism resulting from the - strstream change in the previous version. There is an overloaded - set of str() member functions that weren't a problem when query - objects were based on strstream. - - o Query mechanism had a bunch of const-incorrectness: there were - several function parameters and functions that were const for - the convenience of other parts of the code, but within these - functions the constness was const_cast away! This was evil - and wrong; now there are fewer const promises, and only one is - still quietly broken within the code. (It's in the SQLQuery - copy ctor implementation; it should be harmless.) - - o Removed operator=() in Query and SQLQuery classes. It cannot take - a const argument for the same reason we have to cast away const - in the SQLQuery copy ctor. It's tolerable to do this in the copy - ctor, but intolerable in an operator. Since the copy ctor is good - enough for all code within the library and within my own code, I'm - removing the operator. - - o Above changes required bumping the ABI to version 2. - - o Visual C++ projects now look for MySQL build files in c:\mysql, - since that's the default install location. (Previously, it was - c:\program files\mysql.) - - -1.7.18, 2004.10.01 (r177) - - o Changed all the strstream (and friends) stuff to stringstream type - classes. Let there be much rejoicing. - - o Query object now lets you use store() even when the SQL query - cannot return a result, such as a DROP TABLE command. This is - useful for sending arbitrary SQL to the server. Thanks to - Jose Mortensen for the patch. - - o Quote fix in configure.in, thanks to David Sward. - - o Renamed undef_short file to undef_short.hh. - - o Gentoo ebuild file is actually being shipped with the tarball, - instead of just sitting in my private CVS tree since 1.7.14 was - current. Ooops.... - - -1.7.17, 2004.09.16 (r170) - - o Reverted one of the VC++ warning fix changes from 1.7.16 that - caused crashes on Linux. - - o Added a configure test that conditionally adds the extra 'level' - parameter to mysql_shutdown() that was added in MySQL 4.1.3 and - 5.0.1. - - -1.7.16, 2004.09.13 (r160) - - o Building VC++ version with DLL version of C runtime libraries, and - at warning level 3 with no warnings emitted. - - o VC++ build no longer attempts to fake "long long" support. See - the Wishlist for further thoughts on this. - - -1.7.15, 2004.09.02 (r144) - - o Renamed Configure file to common.am, to avoid file name conflict - with configure script on case-sensitive file systems. - - o Added ebuild file and ebuild target to top-level Makefile for - Gentoo systems. Thanks to Chris Frey for this. - - o Small efficiency improvements to BadQuery exception handling. - Initial idea by Chris Frey, improvements by Warren Young. - - -1.7.14, 2004.08.26 (r130) - - o Builds with Visual C++ 7.1. - - o Fixed a bug in custom macro generation that caused problems with - GCC 3.4. (X_cus_value_list ctor definition was broken.) - - -1.7.13, 2004.08.23 (r92) - - o Removed USL CC support. (System V stock system compiler.) Use - GCC on these platforms instead. - - o Added examples/README, explaining how to use the examples, and - what they all do. - - o Most of the example programs now accept command line arguments for - host name, user name and password, like resetdb does. - - o Renamed sinisa_ex example to dbinfo. - - o Several Standard C++ syntax fixes to quash errors emitted by - GCC 3.4 and Borland C++ Builder 6. Thanks to Steffen Schumacher - and Totte Karlsson for their testing and help with these. - - o Added proper #includes for BCBuilder, plus project files for same. - Thanks to Totte Karlsson for these. - - -1.7.12, 2004.08.19 (r63) - - o Many Standard C++ fixes, most from the GCC 3.4 patch by - Rune Kleveland. - - o Added Wishlist file to distribution. - - o Fixed a problem in the bootstrap script that caused complaints - from the autotools on some systems. - - o RPM building is working properly now. - - o Fixed the idempotency guard in datetime1.hh. - - -1.7.11, 2004.08.17 (r50) - - o Renamed mysql++, defs and define_short files, adding .hh to the - end of each. (They're header files!) This shouldn't impact - library users, since these are hopefully used internal to the - library only. - - o Removed sqlplus.hh file. Use mysql++.hh instead. - - o Added mysql++.spec, extracted from contributed 1.7.9 source RPM, - and updated it significantly. Also, added an 'rpm' target to - Makefile.am to automate the process of building RPMs. - - o Added bootstrap and LGPL files to distribution tarball. - - o Added pre-1.7.10 history to this file. - - o Removed .version file. Apparently it's something required by old - versions of libtool. - - -1.7.10, 2004.08.16 (r27) - - o Maintenance taken over by Warren Young (mysqlpp at etr dash usa - dot com.) See http://lists.mysql.com/plusplus/3326 for details. - - o Applied many of the GCC 3.x patches submitted for 1.7.9 over - the years. This allows it to build on everything from 3.0 to - 3.3.3, at least. Because so many patches are rolled up in one - big jump, it's difficult to describe all the changes and where - they came from. Mostly they're Standard C++ fixes, as GCC - has become more strict in the source code that it will accept. - - o MysqlRow used to overload operator[] for string types as well as - integers so you could look up a field by its name, rather than by - its index. GCC 3.3 says this is illegal C++ due to ambiguities in - resolving which overload should be used in various situations. - operator[] is now overloaded only for one integer type, and a - new member function lookup_by_name() was added to maintain the old - by-field-name functionality. - - o Fixed another operator overloading problem in SSQLS macro - generation with GCC 3.3. - - o The _table member of SSQLS-defined structures is now const char*, - so you can assign to it from a const char* string. - - o Got autoconf/automake build system working with current versions - of those tools again. Removed the generated autotools files from - CVS. - - o Renamed library file from libsqlplus to libmysqlpp. - - -1.7.9 (May 1 2001) Sinisa Milivojevic - - * Fixed a serious bug in Connection constructor when reading MySQL - * options - * Improved copy constructor and some other methods in Result / - * ResUse - * Many other minor improvements - * Produced a complete manual with chapter 5 included - * Updated documentation, including a Postscript format - -1.7.8 (November 14 2000) Sinisa Milivojevic - - * Introduced a new, standard way of dealing with C++ exceptions. - * MySQL++ now supports two different methods of tracing exceptions. - * One is by the fixed type (the old one) and one is standard C++ - * type by the usage of what() method. A choice of methods has to be - * done in building a library. If configure script is run with - * -enable-exception option , then new method will be used. If no - * option is provided, or -disable-exception is used, old MySQL++ - * exceptions will be enforced. This innovation is a contribution of - * Mr. Ben Johnson - * MySQL++ now automatically reads at connection all standard MySQL - * configuration files - * Fixed a bug in sql_query::parse to enable it to parse more then 99 - * char's - * Added an optional client flag in connect, which will enable usage - * of this option, e.g. for getting matched and not just affected - * rows. This change does not require any changes in existing - * programs - * Fixed some smaller bugs - * Added better handling of NULL's. Programmers will get a NULL - * string in result set and should use is_null() method in ColData to - * check if value is NULL - * Further improved configuration - * Updated documentation, including a Postscript format - -1.7.6 (September 22 2000) Sinisa Milivojevic - - * This release contains some C++ coherency improvements and scripts - * enhacements - * result_id() is made available to programmers to fetch - * LAST_INSERT_ID() value - * Connection constroctur ambiguity resolved, thanks to marc@mit.edu - * Improved cnnfigure for better finding out MySQL libraries and - * includes - * Updated documentation, including a Postscript format - -1.7.5 (July 30 2000) Sinisa Milivojevic - - * This release has mainl bug fixes and code improvements - * A bug in FieldNames::init has been fixed, enabling a bug free - * usage of this class with in what ever a mixture of cases that is - * required - * Changed behaviour of ResUse, Result and Row classes, so that they - * could be re-used as much as necessary, without any memory leaks, - * nor with any re-initializations necessary - * Fixed all potential leaks that could have been caused by usage of - * delete instead of delete[] after memory has been allocated with - * new[] - * Deleted all unused classes and macros. This led to a reduction of - * library size to one half of the original size. This has - * furthermore brought improvements in compilation speed - * Moved all string manipulation from system libraries to - * libmysqlclient, thus enabling uniformity of code and usage of 64 - * bit integers on all platforms, including Windows, without - * reverting to conditional compilation. This changes now requires - * usage of mysql 3.23 client libraries, as mandatory - * Changed examples to reflect above changes - * Configuration scripts have been largely changed and further - * changes shall appear in consecutive sub-releases. This changes - * have been done and shall be done by our MySQL developer Thimble - * Smith - * Changed README, TODO and text version of manual. Other versions of - * manual have not been updated - * Fixed .version ``bug''. This is only partially fixed and version - * remains 1.7.0 due to some problems in current versions of libtool. - * This shall be finally fixed in a near future - * Several smaller fixes and improvements - * Added build.sh script to point to the correct procedure of - * building of this library. Edit it to add configure options of your - * choice - -1.7 (May17 2000) Sinisa Milivojevic - - * This is mainly a release dealing with bug fixes, consistency - * improvements and easier configure on some platforms - * A bug in fetch_row() method of ResUse class has been fixed. Beside - * changes that existed in a distributed patch, some additional error - * checking has been introduced - * A bug in escape manipulator has been fixed that could cause an - * error if all characters had to be escaped - * An inconsistency in column indexing has been fixed. Before this - * version, column names in row indexing with strings, i.e. - * row[] , has been case sensitive, which was inconsistent - * with MySQL server handling of column names - * An inconsistency in conversion from strings to integers or floats - * has been fixed. In prior version a space found in data would cause - * a BadConversion exception. This has been fixed, but 100% - * consistency with MySQL server has not been targeted, so that other - * non-numeric characters in data will still cause BadConversion - * exception or error. As this API is used in applications, users - * should provide feedback if full compatibility with MySQL server is - * desired, in which case BadConversion exception or error would be - * abolished in some of future versions - * A new method in ColData class has been introduced. is_null() - * method returns a boolean to denote if a column in a row is NULL. - * Finally, as of this release, testing for NULL values is possible. - * Those are columns with empty strings for which is_null() returns - * true. - * Some SPARC Solaris installations had C++ exception problems with - * g++ 2.95.2 This was a bug that was fixed in GNU gcc, as from - * release 2.95 19990728. This version was thoroughly tested and is - * fully functional on SPARC Solaris 2.6 with the above version of - * gcc. - * A 'virtual destructor ' warning for Result class has been fixed - * Several new functions for STL strings have been added. Those - * functions (see string_util.hh) add some of the functionality - * missing in existing STL libraries - * Conversion for 64 bit integers on FreeBSD systems has been added. - * On those systems _FIX_FOR_BSD_ should be defined in CXXFLAGS prior - * to configuring. Complete conversion to the usage of functions for - * integer conversion found in mysqlclient library is planned for one - * of the next releases - * A completely new, fully dynamic, dramatic and fully mutable result - * set has been designed and will be implemented in some of 2.x - * releases - * Several smaller fixes and improvements, including defaulting - * exceptions to true, instead of false, as of this version - * An up-to-date and complete Postscript version of documentation is - * included in this distribution - * Large chunks of this manual are changed, as well as README and - * TODO files. - -1.6 (Feb 3 2000) Sinisa Milivojevic - - * This is a major release as it includes new features and major - * rewrites - * Automatic quoting and escaping with streams. It works - * automatically , depending on the column type. It will work with << - * on all ostream derived types. it is paricularly handy with query - * objects and strstreams. Automatic quoting and escaping on cout, - * cerr and clog stream objects is intentionally left out, as quoting - * / escaping on those stream objects is not necessary. This feature - * can be turned of by setting global boolean dont_quote_auto to - * true. - * Made some major changes in code, so that now execute method should - * be used only with SSQL and template queries, while for all other - * query execution of UPDATE's, INSERT's, DELETE's, new method exec() - * should be used. It is also faster. - * New method get_string is inroduced for easier handling / casting - * ColData into C++ strings. - * Major rewrite of entire code, which led to it's reduction and - * speed improvement. This also led to removal of several source - * files. - * Handling of binary data is introduced. No application program - * changes are required. One of new example programs demonstrates - * handling of binary data - * Three new example programs have been written and thoroughly - * tested. Their intention is to solve some problems addressed by - * MySQL users. - * Thorough changes is Makefile system has been made - * Better configuration scripts are written, thanks to D.Hawkins - * - * Added several bug fixes - * Changed Manual and Changelog - -1.5 (Dec 1 1999) Sinisa Milivojevic - - * Fixed bug in template queries, introduced in 1.4 (!) - * Fixed connect bug - * Fixed several bug in type_info classes - * Added additional robustness in classes - * Added additional methods for SQL type info - * Changed Changelog and README - -1.4 (Nov 25 1999) Sinisa Milivojevic - - * Fixed bug in store and storein methods - * Fixed one serious memory leak - * Fixed a very serious bug generated by gcc 2.95.xx !! - * Added robustness in classes, so that e.g. same query and row - * objects can be re-used - * Changed sinisa_ex example to reflect and demonstrate this - * stability - * Changed Changelog and README - * Few other bug fixes and small improvements and speed-ups - -1.3 (Nov 10 1999) Sinisa Milivojevic - - * Fixed several erronous definitions - * Further changed source to be 2.95.2 compatible - * Expunged unused statements, especially dubious ones, like use of - * pointer_tracker - * Corrected bug in example file fieldinf1 - * Finally fixed mysql_init in Connection constructor, which provided - * much greater stability ! - * Added read and get options, so that clients, like mysqlgui can use - * it - * Changed Changelog and README - * Many other bug fixes. - -1.2 (Oct 15 1999) Sinisa Milivojevic - - * First offical release. Version 1.0 and 1.1 were releases by Sinisa - * before I (Kevin Atkinson) made him the offical maintainer, - * Many manual fixes. - * Changed README and Changelog - * Changed source to be compilable by gcc 2.95.xx, tribute to Kevin - * Atkinson - * Added methods in Connection class which are necessary for - * fullfilling administrative functions with MySQL - * Added many bug fixes in code pertaining to missing class - * initializers , as notified by Michael Rendell - * Sinisa Milivojevic is now the offical - * maintainer. - -1.1 (Aug 2 1999) Sinisa Milivojevic - - * Added several bug fixes - * Fixed memory leak problems and variables overlapping problems. - * Added automake and autoconf support by loic@ceic.com - * Added Makefile for manual - * Added support for cygwin - * Added example sinisa_ex (let modesty prevail) which used to crash - * a lot when memory allocation, memory leak and overlap problems - * were present. Smooth running of this example proves that all those - * bugs are fixed - * Corrected bugs in sql_query.cc regarding delete versus delete[] - * and string length in manip.cc - * Changed manual - * Changed README - * Many other smaller things - -1.0 (June 9 1999) Michael Widenius - - * Added patches from Orion Poplawski to support the - * UnixWare 7.0 compiler - -.64.1.1a (Sep 27 1998) - - * Fixed several bugs that caused my library to fail to compile with - * egcs 1.1. Hopefully it will still compile with egcs 1.0 however I - * have not been able to test it with egcs 1.0. - * Removed some problem causing debug output in sql++pretty. - -.64.1a (Aug 1 1998) - - * Added an (almost) full guide to using Template Queries. - * Fixed it so the SQLQuery will throw an exception when all the - * template parameters are not provided. - * Proofread and speedchecked the manual (it really needed it). - * Other minor document fixes. - -.64.0.1a (July 31 1998) - - * Reworked the Class Reference section a bit. - * Minor document fixes - * Added more examples for SSQLS. - * Changed the syntax of equal_list for SSQLS from equal_list (cchar - * *, Manip, cchar *) to (cchar *, cchar *, Manip). - * Added set methods to SSQLS. These new methods do the same thing as - * there corresponding constructors. - * Added methods for creating a mysql_type_info from a C++ type_info. - -.64.a (July 24 1998) - - * Changed the names of all the classes so they no longer have to - * have Mysql in the begging of it. However if this creates a problem - * you can define a macro to only use the old names instead. - * The Specialized SQL Structures (formally known as Custom Mysql - * Structures) changed from mysql_ to sql_. - * Added the option of using exceptions thoughout the API. - * ColData (formally known as MysqlStrings) will now throw an - * exception if there is a problem in the conversion. - * Added a null adapter. - * Added Mutable Result Sets - * Added a very basic runtime type identification for SQL types - * Changed the document format from POD to LYX . - * Am now using a modified version of Perceps to extract the class - * information directly from the code to make my life easier. - * Added an option of defining a macro to avoid using the automatic - * conversion with binary operators. - * Other small fixed I probully forgot to mentune. - -.63.1.a - - * Added Custom Mysql Structures. - * Fixed the Copy constructor of class Mysql - * Started adding code so that class Mysql lets it children now when - * it is leaving - * Attempted to compile it into a library but still need help. As - * default it will compile as a regular program. - * Other small fixes. - -.62.a (May 3 1998) - - * Added Template Queries - * Created s separate SQLQuery object that is independent of an SQL - * connection. - * You no longer have to import the data for the test program as the - * program creates the database and tables it needs. - * Many small bug fixes. - -.61.1.a (April 28 1998) - - * Cleaned up the example code in test.cc and included it in the - * manual. - * Added an interface layout plan to the manual. - * Added a reverse iterator. - * Fixed a bug with row.hh (It wasn't being included because of a - * typo). - -.61.0.a - - * Major interface changes. I warned you that the interface may - * change while it is in pre-alpha state and I wasn't kidding. - * Created a new and Separate Query Object. You can no longer execute - * queries from the Mysql object instead you have to create a query - * object with Mysql::query() and use it to execute queries. - * Added the comparison operators to MysqlDate, MysqlTime and - * MysqlDateTime. Fixed a few bugs in the MysqlDate... that effected - * the stream output and the conversion of them to strings. - * Reflected the MysqlDate... changes in the manual. - * Added a new MysqlSet object and a bunch of functions for working - * with mysql set strings. - -.60.3a (April 24 1998) - - * Changed strtoq and strtouq to strtoll and strtull for metter - * compatibility Minor Manual fix. - * Changed makefile to make it more compatible with Solaris (Thanks - * Chris H) - * Fixed bug in comparison functions so that they would compare in he - * right direction. - * Added some items to the to do list be sure to have a look. - +2000-01-06 Dale Hawkins + + * acconfig.h: New file. Lets me define the library versioning. + + * autogen.sh: Boilerplate configuration jump-start script. + +2000-01-04 Dale Hawkins + + * sqlplus.spec.in (Packager): Created new spec.in file to work + with autoconf/automake and libtool for easier releases of + RPMs. (Yes, I am a Linux bigot and I think the world should + revolve around RPMs). + + * configure.in: Reworked this file to work with spec.in and + support libtool type versioning. + +1999-10-15 Sinisa Milivojevic + +* Changed version to 1.2 +* First offical release. Version 1.0 and 1.1 were releases by Sinisa + before I (Kevin Atkinson) made him the offical maintainer, +* Many manual fixes. +* Changed README and Changelog +* Changed source to be compilable by gcc 2.95.xx, tribute to Kevin + Atkinson +* Added methods in Connection class which are necessary for + fullfilling administrative functions with MySQL +* Added many bug fixes in code pertaining to missing class + initializers , as notified by Michael Rendell +* Sinisa Milivojevic is now the offical + maintainer. + + +1999-08-02 Sinisa Milivojevic + +* Changed version to 1.1 +* Added several bug fixes +* Fixed memory leak problems and variables overlapping problems. +* Added automake and autoconf support by loic@net.fr +* Added Makefile for manual +* Added support for cygwin +* Added example sinisa_ex (let modesty prevail) which used to crash a + lot when memory allocation, memory leak and overlap problems were + present. Smooth running of this example proves that all those bugs are + fixed +* Changed manual +* Cheanged README +* Many other smaller things + +1999-06-09 Michael Widenius + +* Changed version to 1.0 +* Added patches from Orion Poplawski to support the + UnixWare 7.0 compiler DELETED HACKERS Index: HACKERS ================================================================== --- HACKERS +++ /dev/null @@ -1,173 +0,0 @@ -If you are going to make any changes to MySQL++, this file has some -hints and commentary you may find helpful. - - -Subversion Access -~~~~~~~~~~~~~~~~~ - To check out the current development version from the Gna! - Subversion repository, say: - - $ svn co svn://svn.gna.org/svn/mysqlpp/trunk mysqlpp - - If you're a MySQL++ committer, use svn over ssh instead: - - $ svn co svn+ssh://LOGIN@svn.gna.org/svn/mysqlpp/trunk mysqlpp - - where LOGIN is your Gna! login name. You will have to have your - ssh public key(s) registered with Gna! for this to work. - - -Submitting Patches -~~~~~~~~~~~~~~~~~~ - If you wish to submit a patch to the library, please send it to - the MySQL++ mailing list, or attach it to an entry in our bug - tracker on Gna! We want patches in unified diff format. - - The easiest way to get a unified diff is to check out a copy of - the current MySQL++ tree as described in the previous section. - Then make your change, cd to the MySQL++ root directory, and ask - Subversion to generate the diff for you: - - $ svn diff > mychange.patch - - If your patch adds new files to the distribution, you can say - "svn add newfile" before you do the diff, which will include - the contents of that file in the patch. (You can do this even - when you've checked out the tree anonymously.) Then say "svn - revert newfile" to make Subversion forget about the new file. - - If you're making a patch against a MySQL++ distribution tarball, - then you can generate the diff this way: - - $ diff -ruN mysql++-olddir mysql++-newdir > mychange.patch - - The diff command is part of every Unix and Linux system, and - should be installed by default. If you're on a Windows machine, - GNU diff is part of Cygwin (http://cygwin.com/). Subversion is - also available for all of these systems. There are no excuses - for not being able to make unified diffs. :) - - -Testing Your Proposed Change -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - In v2.3.2, we added a new script called 'dtest'. You run it - like you would most of the examples, except that you don't need - to run it via exrun: - - $ ./dtest [host] [user] [pass] - - This automatically runs most of the examples, captures the outputs - to a file, and then compares that to a known-good run's outputs. - The purpose of this is that, before you submit a patch, run dtest - and see if it indicates that anything has changed. If something - has and you can't account for it, it represents a problem that - you'll have to fix before submitting the patch. - - If your change purposely causes different outputs from a dtest - run, remove the bmark.txt file, then re-run dtest and include - the bmark.txt diffs with your patch. This communicates to us - the fact that you know there are differences and want the patch - evaluated anyway. Otherwise, we are likely to view the change - as a bug. - - -Adding Support for a Different Compiler -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - MySQL++ uses the Bakefile system for creating project files - and makefiles. This allows us to make changes to a single set - of files, and have the proper changes be made to all generated - project files and makefiles. In the past, we used more ad-hoc - systems, and we'd frequently forget to update individual project - files and makefiles, so at any given time, at least one target - was likely to be broken. - - If MySQL++ doesn't currently ship with project files or makefiles - tuned for your compiler of choice, you need to work through the - Bakefile mechanism to add support. We're not willing to do ad-hoc - platform support any more, so please don't ask if you can send - us project files instead; we don't want them. - - If you want to port MySQL++ to another platform, we need to be - confident that the entire library works on your platform before - we'll accept patches. In the past, we've had broken ports that - were missing important library features, or that crashed when built - in certain ways. Few people will knowingly use a crippled version - of MySQL++, since there are usually acceptable alternatives. - Therefore, such ports become maintenance baggage with little - compensating value. - - -On Manipulating the Bakefiles and Autoconf Files -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - If you're on a Unixy platform and change any of mysql++.bkl, - configure.ac, or config/*, you must re-run the bootstrap script - to regenerate the build files. The bootstrap script also has - other functions: - - $ ./bootstrap [pedantic] [no{doc,ex,lib,opt}] [configure flags] - - If you pass 'pedantic' to the bootstrap script, it will set up - the autoconf build system so it turns on all of GCC's warnings and - such. It's useful to build the library in this mode when making - changes to make sure there are no obvious problems with the code. - - If you pass 'nodoc', the documentation won't be considered a - prerequisite for building the distribution tarball. This is - useful on systems where the documentation doesn't build correctly, - and you only need to make a binary RPM. That process requires - a tarball, but doesn't need the documentation. Don't distribute - the tarball or SRPM that results, as they are broken. - - If you pass 'noex', the generated Makefiles and project files - won't try to build any of the examples. - - If you pass 'nolib', the generated Makefiles and project files - won't try to build the MySQL++ library. - - If you pass 'noopt', compiler optimization will be turned off - on systems that use configure. (It currently has no effect on - MinGW or Visual C++.) - - You can pass any of the previous options in any order. As soon as - the bootstrap script sees an option that it doesn't understand, - it stops processing the command line. Any subsequent options - are passed to the configure script. See README.unix for more on - configure script options. - - If you're on Windows and you change the Bakefile (mysql++.bkl), - re-generating the Makefiles and project files from it is a - little tricky. The above procedure doesn't work because the - native Win32 port of Bakefile is incomplete, and Bakefile doesn't - build correctly under Cygwin. Therefore, you need to run the - bakefile program directly. You'll use one of these two commands, - depending on which compiler you're using: - - C:\> bakefile -f msvc6prj mysql++.bkl - C:\> bakefile -f mingw -o Makefile.mingw mysql++.bkl - - -Maintaining a Private CVS Repository -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - You may find it helpful to maintain your own CVS repository. - Whenever there is a new MySQL++ release, import it on the vendor - branch like this: - - $ cvs import -m "Version 1.7.35" software/mysql++ mysql++ mysql++-1_7_35 - - (This assumes that you have your CVSROOT environment variable - set properly.) - - Update the HEAD branch like this: - - $ cd mysql++ - $ cvs update -PdA - $ cvs update -j HEAD -j mysql++-1_7_35 -Pd - $ cvs ci -m "merged 1.7.35 into HEAD" - $ cvs tag mysql++-1_7_35-merged - - Then any changes you make can easily be tracked, and diffs can - be produced with rdiff: - - $ cvs rdiff -ru mysql++-1_7_35 -r mysql++-1_7_35_equal_list \ - $(cat CVS/Repository) > equal_list.patch - Index: INSTALL ================================================================== --- INSTALL +++ INSTALL @@ -1,9 +1,1 @@ -The installation procedure depends on the compiler you use to build -MySQL++. See: - - README.unix - for Unix, Linux, Mac OS X, etc. - README.cygwin - for Cygwin - README.mingw - for MinGW - README.vc - for Visual C++ - -Also see the main README file for things that apply to all systems. +/usr/share/automake/INSTALL ADDED LGPL Index: LGPL ================================================================== --- /dev/null +++ LGPL @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! DELETED LICENSE Index: LICENSE ================================================================== --- LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library 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. - - This library 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 this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - ADDED Makefile.am Index: Makefile.am ================================================================== --- /dev/null +++ Makefile.am @@ -0,0 +1,14 @@ +# This includes sqlplus.spec _and_ sqlplus.spec.in +# (this way rpm -ta xxxx work) +EXTRA_DIST = @PACKAGE@.spec @PACKAGE@.spec.in @PACKAGE@-config.in + +SUBDIRS = sqlplusint examples doc # devel + +bin_SCRIPTS = sqlplus-config + +CONFIG_FILE = @PACKAGE@-config-@SQLPLUS_MAJOR_VERSION@.@SQLPLUS_MINOR_VERSION@ + +$(CONFIG_FILE): @PACKAGE@-config + cp $^ $@ + +@PACKAGE@-config: @PACKAGE@-config.in ADDED NEWS Index: NEWS ================================================================== --- /dev/null +++ NEWS Index: README ================================================================== --- README +++ README @@ -1,124 +1,73 @@ -What It Is -~~~~~~~~~~ - MySQL++ is a C++ wrapper for MySQL's C API. It is built - around STL principles, to make dealing with the database - as easy as dealing with an STL container. MySQL++ relieves - the programmer of dealing with cumbersome C data structures, - generation of repetitive SQL statements, and manual creation - of C++ data structures to mirror the database schema. - - Its home page is http://tangentsoft.net/mysql++/ - - -Prerequisites -~~~~~~~~~~~~~ - To build MySQL++, you must have the MySQL C API development - files installed. - - On Unixy systems (Linux, Mac OS X, Cygwin, "real" Unix...), - the MySQL development files are installed if you build MySQL - from source. If you installed MySQL as a binary package, - then the development files are often packaged separately - from the MySQL server itself. It's common for the package - containing the development files to be called something like - "MySQL-devel". - - If you're building on Windows with Visual C++ or MinGW, you - need to install the native Win32 port of MySQL from mysql.com. - The development files are only included with the "complete" - version of the MySQL installer, and some versions of this - installer won't actually install them unless you do a custom - install. Another pitfall is that MySQL++'s project files - assume that you've installed the current General Availability - release of MySQL (v5.0 right now) and it's installed in the - default location. If you've installed a different version, - or if MySQL Inc. changes the default location (which they - seem to do regularly!) you'll have to adjust the link and - include file paths in the project settings. - - -Additional Things to Read -~~~~~~~~~~~~~~~~~~~~~~~~~ - Each major platform we support has a dedicated README.* file - for it containing information specific to that platform. - Please read it. - - For authorship information, see the CREDITS file. - - For license information, see the LICENSE file. - - If you want to change MySQL++, see the HACKERS file. - - You should have received a user manual and a reference manual - with MySQL++. If not, you can read a recent version online: - - http://tangentsoft.net/mysql++/doc/ - - Search the MySQL++ mailing list archives if you have more - questions: - - http://lists.mysql.com/plusplus/ - - -Building the Library -~~~~~~~~~~~~~~~~~~~~ - As of version 2.1, MySQL++ uses the Bakefile build system. This - tool creates platform-specific project files and makefiles. We - currently support these options: - - autoconf: - For Unixy platforms, including Linux, Mac OS X, and - Cygwin. See README.unix for details. Supplementary - details for Cygwin are in README.cygwin. - - Visual C++: - We ship Visual C++ 6 project files, but MySQL++ only - works with Visual C++ 7.1 (a.k.a. Visual Studio 2003) - or newer. Your version of Visual Studio will upgrade - these project files for you. See README.vc for details. - - MinGW: - We ship Makefiles made for MinGW. These currently only - work for building static versions of the library, - which has licensing ramifications. See README.mingw - for details. - - -Example Programs -~~~~~~~~~~~~~~~~ - You may want to try out the programs in the examples - subdirectory to ensure that the MySQL++ API and your - MySQL database are both working properly. Also, these - examples give many examples of the proper use of MySQL++. - See README.examples for further details. - - -Unsupported Compliers -~~~~~~~~~~~~~~~~~~~~~ - If you're on Windows but want to use some other compiler - besides Visual C++ or GCC, you are currently on your own. - There have been past efforts to port MySQL++ to other Windows - compilers, but for one reason or another, all of these ports - have died. - - On Unixy systems, GCC still works best. "Native" compilers - and third-party compilers may work, but you're on your own - to get it working. - - We have nothing in particular against these unsupported - systems. We just lack the time and resources to support - everything ourselves. If you are sufficiently motivated to - get MySQL++ working on one of these alternate systems, see - the HACKERS file first for guidance. If you follow the advice - in that file, your patch will be more likely to be accepted. - - -If You Want to Hack on MySQL++... -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - If you intend to change the library or example code, please - read the HACKERS file. - - If you want to change the user manual, read doc/userman/README. - - If you want to change the reference manual, see the Doxygen - manual: http://www.stack.nl/~dimitri/doxygen/manual.html +This is C++ API library for MySQL. + +Starting based of 1.2, this is now maintained by sinisa@cytanet.com.cy +as kevinatk@home.com doesn't have time to support this library anymore. + +He has made sinisa@cytanet.com.cy a new official maintainer, which will +continue to keep mysql++ library under LGPL. + + +Original information from kevinatk@home.com: +--------------------------------------------------------------------- + +After several people commented on how my quickie wrapper would be of +little use I decided to go all out and create a full featured +version. + +To my knowledge this library requiures gcc 2.8 or egcc or better and of +course the mysql library. + +To compile the library and modify the file Configure aproprietly +and type make. + +I am working on trying to get this to compile into a library. +However I really don't know what I am doing. If you have some +experense with this please take a look at my makefile and uncomment the +appropriate lines and let me know if I am doing everything right. + +For more information please see the manual. + +I developed it using egcc ver 1.02 (I think) from the Debian hamm +package with kernel 2.0.33 and a Cryix P150+ cpu. I am also using +Mysql 3.21.25 that is in the non-free section of the Debian +distribution. + +Be sure to let me know what you think. I depend on your feedback. + +Thanks, +I can be reached at kevinatk@home.com +-------------------------------------------------------------------- +End of original README by Kevin Atkinson + + +Since October 1999, all maintenance has been transferred to Sinisa +Milivojevic (sinisa@cytanet.com.cy) and Michael Widenius (monty@mysql.com). + +Send your feedback to any of these addresses, or even better to the +mailing list mysql-plusplus@lists.mysql.com. + +Since versin 1.1, mysql++ has been prepared to be built with automake and +autoconf. + +This will make compilation and installation much easier. + +You should cd to the root of source directory and run ./configure. + +If you are running it several times, because you have problems, do delete +config.cache. In case of the problem config.log contains more info on +it's whereabouts. + +After configure is run, config.h and Makefiles are generated. + +If you wish to install mysql++ in a root directory other then /usr/local, +you should run configure with --with-prefix=..... + +Configure contains description of other switches available. + +After running configure, run make and make install. Libs will be +installed in prefix/lib and include files in prefix/include/mysql++. + + +Since version 1.3, mysql++ is fully compliant with latest 2.95.xx series +of compilers. + DELETED README.cygwin Index: README.cygwin ================================================================== --- README.cygwin +++ /dev/null @@ -1,33 +0,0 @@ -Prerequisite: Build MySQL -~~~~~~~~~~~~~~~~~~~~~~~~~ - Before you can build MySQL++, you need to build the MySQL - client library from source. This is necessary because - Cygwin programs work best when linked to Cygwin libraries. - You do not need to build a Cygwin version of the MySQL server; - it's still best to use the native Win32 version of that. - - The MySQL client library does not build correctly out of - the box. The best instructions I've found covering the - necessary changes are here: - - http://cygwin.com/ml/cygwin/2004-11/msg00159.html - - I recommend that you use MySQL v4.1.x at this time. Skip the - step changing the pthread stuff in my_thr_init.c, as this - change has already been made in recent versions of MySQL. - - With the changes applied, build and install the client library - like so: - - $ autoreconf --install --verbose --force - $ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --infodir=/usr/share/info --mandir=/usr/share/man \ - --disable-shared --without-{debug,readline,libedit,server} - $ make - $ make install - - -Building the Library and Example Programs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - With that done, you can build MySQL++ just as you would most - other Unix programs. See README.unix for details. DELETED README.examples Index: README.examples ================================================================== --- README.examples +++ /dev/null @@ -1,174 +0,0 @@ -Building the Examples -~~~~~~~~~~~~~~~~~~~~~ - If you're installing MySQL++ from the source tarball, the example - programs get built when you build the library. If you change - any example code, just say 'make' to rebuild the examples. - The examples are built against the headers and library in the - lib subdirectory, not against the ones you may have installed - elsewhere on the system. - - If these example files were installed on your system as part of - the -devel RPM, copy all the files to a directory you can write - to, then say 'make' in that directory. This uses a simplified - Makefile, which builds the examples against the headers and - libraries installed in the system directories. - - -Getting Started with the Examples -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - MySQL++ is built as a shared library on most systems, and a DLL - on Windows. Since it isn't built in the same directory as the - examples, this means that your system won't be able to find the - library without help until you install it. Since you generally - want to run the examples _before_ installing the library, to test - that the library actually works, we need a workaround. - - That workaround is the exrun script. There are two versions, - a Bourne shell script called just exrun for POSIX systems, and - exrun.bat for Windows. - - Before running the other examples, you must first create the - sample database. On POSIX systems, you do that like so: - - $ ./exrun resetdb [host] [user] [password] [port] - - On Windows, that would instead be: - - C:\mysql++\> exrun.bat resetdb [host] [user] [pass] [port] - - If you mistakenly run resetdb directly instead of through exrun, - it will either fail to run because it can't find the MySQL++ - library, or it will find an old version and complain about it. - None of the other examples are protected against mixed versions - in this way, but since you have to run resetdb before all the - other examples, this should pose no problem. - - You can give as few of the parameters as you want, but they must - be in that order. That is, if you want to give a user name, - you must give the host first. It defaults to localhost with - your user name, no password, and the default MySQL port (3306). - - -Running the Other Command Line Examples -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - The following examples use the database set up by resetdb, and - have the same command line format as resetdb: - - simple1: Shows the item names for all records in the sample - stock table. Try this one if you do nothing else. - - simple2: Similar to simple1, but it displays all columns - from the sample stock table, not just the item name. - - simple3: Same as simple2, except that it retrieves the data - with a "use" query instead of a "store" query. See the - user manual for the difference between these methods. - - custom1-6: Demonstrates the SSQLS features. These examples - are explained in the user manual. - - usequery: Demonstrates Query::use(). Unlike simple3, which - also showcases this function, this one shows how use - queries interact with exception handling: when you walk - past the end of a "use" query set with exceptions enabled, - MySQL++ throws an exception to indicate end of results, - which you must catch. - - multiquery: MySQL++ allows you to issue multiple queries at - once, and get the results as separate sets. This shows - that, and also how to use stored procedures, which return - their results in the same way as a multiquery. - - tquery: A simple example showing how to use the template query - facility. - - xaction: Shows how to use the Transaction class to create - transaction sets which automatically roll back if not - explicitly committed. - - store_if: Demonstrates the Query::store_if() method, which - allows you to store the results of a query in an STL - container conditionally. Think of it as a more powerful - alternative to the SQL WHERE clause. - - for_each: Demonstrates the Query::for_each() method, which - allows you to execute a query and call a functor on each - returned row. This example uses this to gather statistics - on the sample table's contents. - - load_jpeg: Inserts a JPEG file into the sample database, - for use by the cgi_jpeg example. (See below.) Unlike - the other examples, this one takes the last command - line argument to be a JPEG file name. We've included - examples/logo.jpg as a sample, if you want to use that. - - fieldinf1: Shows how to get information about the fields in - a result set. (Types, etc.) - - dbinfo: Dumps a bunch of information about the database - server and the tables in its 'mysql' database. - - If you run the load_jpeg example, you should consider also - playing with the other half of the demonstration, cgi_jpeg. - To run it, you'll need to install MySQL++ on a machine with - a web server, then copy the cgi_jpeg program to the server's - CGI directory. For example, on a stock Red Hat type box, - that would be /var/www/cgi-bin. At that point, a request like - http://my.server.com/cgi-bin/cgi_jpeg?id=1 should show the - JPEG you loaded. The ID value to use will be that reported - by load_jpeg. - - -Dedicated Windows Examples -~~~~~~~~~~~~~~~~~~~~~~~~~~ - If you're a Visual C++ user, there are two examples specially - created for you: - - examples\vstudio\mfc.vcproj: A GUI replacement for the simple2 - example, it simply logs in and displays the stock table's - contents. Uses good old C++ and MFC. - - examples\vstudio\wforms.vcproj: The same thing, only written in - C++/CLI and using Windows Forms. We needed a second example - for two reasons. First, string handling is quite different - under .NET than in unmanaged C++. Second, many developers - are now using Visual Studio Express, which doesn't include - MFC. Please read README.vc before trying to run this example. - The MySQL++ build settings must be modified before it will - run correctly. - - Before trying to run these examples, run the updexdll.bat file - in the top MySQL++ directory. This copies the built mysqlpp.dll - files into the Windows examples' EXE output directories so you - can run them before you're ready to formally install the DLL on - your system. - - Open examples\vstudio\mysqlpp_gui_examples.sln to begin working - with these examples. They only work correctly in Visual Studio - 2005 right now. If you want to backport them to VS 2003, it's - probably not hard, and we will accept patches for this. The main - difficulty is that VS 2003 supports Managed C++, which isn't - the same thing as C++/CLI. - - The main justification for these examples is that Unicode is - handled differently in Windows GUI programs than on the POSIX - systems where MySQL++ was born and raised. In earlier versions - of MySQL++, the command line examples had very limited Unicode - support on Windows, but it was unrealistic and confusing. Now the - command line examples don't even try to handle Unicode on Windows, - leaving that up to these new GUI examples. - - -Special exrun Capabilities -~~~~~~~~~~~~~~~~~~~~~~~~~~ - The Bourne shell version of the exrun script has a few features - not avaiable in the Windows batch file version. These features - let you run the examples under various debugging tools. - - You can get simple gdb debugging if you run an example like this: - - $ ./exrun gdb simple1 foo bar qux - - The script also supports valgrind, in memory leak testing mode: - - $ ./exrun valgrind simple1 foo bar qux DELETED README.mingw Index: README.mingw ================================================================== --- README.mingw +++ /dev/null @@ -1,49 +0,0 @@ -MinGW Version -~~~~~~~~~~~~~ - You need a fairly recent version of MinGW for MySQL++ to work. - As I write this, the current release version includes GCC - 3.4.2, which has known problems. Unless they've released - a newer version since I wrote this, you'll probably need to - install the "candidate" version for best compatibility. - - -Prerequisite: Create Import Library -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Before you can build MySQL++ with MinGW, you will need to - create a MinGW-compatible import library for MySQL's C API - library. Using the current default install path for MySQL and - assuming MySQL++ is in c:\mysql++, the commands to do this are: - - cd C:\Program Files\MySQL\MySQL Server 5.0\lib\opt - dlltool -k -d c:\mysql++\libmysqlclient.def -l libmysqlclient.a - - -Building the Library and Example Programs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Now you can build MySQL++ with this command: - - mingw32-make -f Makefile.mingw - - Notice that we're using the MinGW-specific version of GNU - make, not the Cygwin or MSYS versions. This is in order to - get proper path separator handling. - - If MySQL isn't in C:\Program Files\MySQL\MySQL Server 5.0\ you have - two options: - - - The simplest is to edit Makefile.mingw. This is - a generated file, but if that's all the only change - to MySQL++ you need, it works fine. - - - If you're doing deeper work on MySQL++, you - should make your changes in mysql++.bkl instead. - Then to generate Makefile.mingw from that file, - you will need the Win32 port of Bakefile from - http://bakefile.sf.net/ The command to do that is: - - bakefile -f mingw -o Makefile.mingw mysql++.bkl - - Once the library is built and you're satisfied that it's working - correctly, you can run the install.bat file at the project - root to automatically install the library files and headers in - subdirectories under c:\mysql++. DELETED README.unix Index: README.unix ================================================================== --- README.unix +++ /dev/null @@ -1,61 +0,0 @@ -Building the Library and Example Programs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - MySQL++ uses the GNU autoconf, so you can build it with the - standard commands: - - # ./configure - $ make - $ su - # make install - - On Linux, you also need to run 'ldconfig' as root after - installing the library. You may need to add the library's - installation directory to /etc/ld.so.conf before you do this, - particularly if you installed to /usr/local. - - -Configure Options -~~~~~~~~~~~~~~~~~ - The configure script takes several interesting options. Say: - - $ ./configure --help - - to get a list. Some of the more interesting flags are: - - --prefix: - - If you wish to install mysql++ in a root directory - other than /usr/local, run configure with - --prefix=/some/dir/name - - --with-mysql*: - - If you installed MySQL in an atypical location, - the configure script will not be able to find the - library and header files without help. The simplest - way to clue configure into where MySQL is installed - is with the --with-mysql option. Try something - like "--with-mysql=/usr/local/mysql", for instance. - The configure script will then try to guess which - subdirectories under the given directory contain the - library and include files. - - If that still doesn't work, use --with-mysql-include - and --with-mysql-lib instead. As with --with-mysql, - configure can often guess which subdirectory under the - given directory contains the needed files, so you don't - necessarily have to give the full path to these files. - - --enable-thread-check: - - Builds MySQL++ with threads support, if possible. - - This option simply turns on two tests: first, that - your system uses a compatible threading library; and - second, that the thread-safe version of the MySQL C API - library (libmysqlclient_r) is installed and working. - If both of these are true, you get a thread-aware - version of MySQL++. "Thread-aware" means that the - library does make an effort to prevent problems, but - we don't guarantee that all possible uses of MySQL++ - are thread-safe. DELETED README.vc Index: README.vc ================================================================== --- README.vc +++ /dev/null @@ -1,178 +0,0 @@ -Prerequisites -~~~~~~~~~~~~~ - MySQL++ requires Visual Studio 2003 or later. Earlier versions - did not support a sufficiently broad subset of Standard C++. - - You also need to have MySQL installed. The installer may have - given you the option of whether to install the development files - or not; if you didn't let it install them, you need to reinstall. - - -Building the Library and Example Programs -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - As of MySQL++ v2.2, there is only one set of project files - in the top level directory for MySQL++. We ship VC++6 style - project files (.dsw and .dsp instead of .sln and .vcproj) due to - a limitation of the tool we use to generate the project files. - Just let Visual Studio convert these to the new format. - - If you installed MySQL somewhere other than - - C:\Program Files\MySQL\MySQL Server 5.0\ - - you need to change the project file settings. The simplest way - to do this is to change the link and include file directories in - the project settings directly. Although these are technically - generated files and it's generally bad practice to change generated - files, if that's all the only change to MySQL++ you need, this - is harmless. See below if you want to change the actual source - files that create the project files. - - Be sure to build both the Debug and Release versions of the - library. You will need them both because when you build your - program in Release mode, it won't work with mysqlpp.dll built - in Debug mode. The converse may also be true, but I'm not sure. - The simplest way to ensure that you're running your program against - the correct DLL is to copy the debug version of the MySQL++ DLL - into your program's Debug build directory, and the same for the - release version. - - With the library built, run at least the resetdb and simple1 - examples to ensure that the library is working correctly. - See README.examples for further details. - - Once you're sure the library is working correctly, run the - install.bat file at the project root to automatically install - the library files and headers in subdirectories under c:\mysql++. - - -Using MySQL++ in an MFC Project -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - If you don't already have a project set up, open Visual Studio, say - File::New::Project, then choose Visual C++::MFC::MFC Application. - Go through the wizard setting up the project as you see fit. - - Once you have your project open, right click on your top-level - executable in the Solution Explorer, choose Properties, and make - the following changes. (Where it doesn't specify Debug or Release, - make the change to both configurations.) - - o Append the following to C/C++::General::Additional Include - Directories: - - C:\Program Files\MySQL\MySQL Server 5.0\include, - C:\mysql++\include - - o Under C/C++::Code Generation change "Runtime Library" to - "Multi-threaded Debug DLL (/MDd)" for the Debug - configuration. For the Release configuration, make it - "Multi-threaded DLL (/MD)". - - o Append the following to Linker::General::Additional Library - Directories for the Debug configuration: - - C:\Program Files\MySQL\MySQL Server 5.0\lib\debug, - C:\mysql++\vc\debug - - For the Release configuration, make it the same, but - change the 'debug' directory names to 'opt'. - - o Under Linker::Input add the following to "Additional - Dependencies": - - libmysql.lib wsock32.lib mysqlpp.lib - - You may want to study examples\vstudio\mfc\mfc.vcproj to see - this in action. Note that some of the paths will be different, - because it can use relative paths for mysqlpp.dll. - - -Using MySQL++ in a Windows Forms C++/CLI Project -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Before you start work on getting MySQL++ working with your own - program, you need to make some changes to the MySQL++ build settings. - Open mysqlpp.sln, then right-click on the mysqlpp target and select - Properties. Make the following changes for both the Debug and - Release configurations: - - o Under Configuration Properties::General, change "Common - Language Runtime support" to the /clr setting. - - o Under C/C++::Command Line, remove the /EHsc from the - Additional Options section. - - If you have already built MySQL++, be sure to perform a complete - rebuild after changing these options. The compiler will emit several - C4835 warnings after making those changes, which are harmless when - using the DLL with a C++/CLI program, but which warn of real problems - when using it with unmanaged C++. As a result, it's probably best - if you don't install the resulting DLL in a system level directory. - I'd recommend copying it only into the same directory as the EXE. - - Once you have MySQL++ built with CLR support, open your program's - project. If you don't already have a project set up, open Visual - Studio, say File::New::Project, then choose Visual C++::CLR::Windows - Forms Application. Go through the wizard setting up the project as - you see fit. - - The configuration process isn't much different from that for an - MFC project, so go through the list above first. Then, make the - following changes particular to .NET and C++/CLI: - - o Under Configuration Properties::General change the setting - from /clr:pure to /clr. (You need mixed assembly support - to allow a C++/CLI program to use a plain C++ library like - MySQL++.) - - o For the Linker::Input settings, you don't need wsock32.lib. - The mere fact that you're using .NET takes care of that - dependency for you. - - In the MFC instructions above, it said that you need to build it - using the Multi-threaded DLL version of the C++ Runtime Library. - That's not strictly true for MFC, but it's an absolute requirement - for C++/CLI. See the Remarks in this MSDN article for details: - - http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx - - You may want to study examples\vstudio\wforms\wforms.vcproj to see - all this in action. Note that some of the paths will be different, - because it can use relative paths for mysqlpp.dll. - - -Working With Bakefile -~~~~~~~~~~~~~~~~~~~~~ - MySQL++'s Visual Studio project files aren't maintained directly. - Instead, they're generated from mysql++.bkl using a tool called - Bakefile, from http://bakefile.sourceforge.net/ We do it this - way so we can support multiple platforms and build systems in a - common way. - - Therefore, if you need to make changes to the project files - and want to submit those changes back to the MySQL++ project, - you need to do your changes to mysql++.bkl instead of directly to - the project files. There is a native Win32 version of Bakefile up - on that web site. Download that and put the directory containing - bakefile.exe in your Windows PATH. - - The documentation on the Bakefile web site isn't wonderful, but - is adequate for most things. If you can't find documentation - for the feature you need, it's quite likely that Bakefile just - doesn't support it. There are things you can do to the project - settings in Visual Studio that you can't do in Bakefile, since - it's a cross-platform tool. - - Once you've made your changes, generate the Visual C++ project - files with this command: - - bakefile -f msvc6prj mysql++.bkl - - -If You Run Into Problems... -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Especially if you have linking problems, make sure your project - settings match the above. Visual C++ is very picky about things - like run time library settings. When in doubt, try running one - of the example programs. If it works, the problem is likely in - your project settings, not in MySQL++. - DELETED Wishlist Index: Wishlist ================================================================== --- Wishlist +++ /dev/null @@ -1,326 +0,0 @@ -Patches for any of these thoughtfully considered! See the HACKERS file -for instructions on sending patches. - -Here's a meta-item that doesn't really fit into any of the categories -below: any time you must hand-roll some SQL code in your program, -consider whether it could be reduced to an API feature that would be -widely useful. Patches or proposals of this sort are always welcome. - - -v2.x Features -------------- - Items in this section may slip to v3.0. The only thing that - puts an item in this section instead of the v3.0 one is that - it can be done without breaking the ABI, which would force - a feature to v3.0. - - o Add ConnectionPool class, described in this post: - - http://lists.mysql.com/plusplus/6631 - - o Extend the manipulators to handle nullable versions of - the types we already support. Should just be a matter of - duplicating the existing type-specific manipulator functions, - and wrapping the types in Null<>. - - o Add a few features to date and time classes: - - - It may be possible to get some nice syntactic sugar, - such as a way to call SQL functions like NOW() when - inserting certain Date/Time objects into a Query stream. - - - Arithmetic features? (See "Practical Algorithms for - Programmers" by Binstock and Rex.) - - o Add conditional code to the Lockable mechanism to use platform - mutexes if available, to implement these MySQL C API - restrictions: - - - Only one query executing at once per connection - - - For "use" queries, Connection (and therefore Query) object must - remain locked until last row is consumed - - - Safest to have one Connection per thread. Rules for sharing: - http://dev.mysql.com/doc/mysql/en/threaded-clients.html - - Need some way to call mysql_thread_init() and - mysql_thread_end() per thread. Also, work in some way to - call mysql_thread_safe() automatically, perhaps the first - time through the function that calls mysql_thread_init(). - If the C API library reports that it is not thread-safe, - report this to the caller, perhaps through an exception, - or simply by refusing to init more than one thread. - - o Build a forward iterator mechanism for ResUse. Make it - general enough that you can use it with STL algorithms - like find_if(). Then make an example to demonstrate this - augmentation of SELECT. Also, update usequery example - to use the iterator. Tricky bit: how do we make it not - interfere with subclass Result's random-access iterator? - - o It may be possible to optimize the use of ColData in the return - from Row::operator[]. Currently, that operator returns a - temporary ColData object, which contains a copy of the field data - in its std::string base class instead of a const char* pointer - to data within the Row object. If the caller just wants a - const char*, we can avoid at least one copy here, maybe two. See: - - http://lists.mysql.com/plusplus/4451 - http://lists.mysql.com/plusplus/4460 - - o Add Chris Frey's packarray class? - - -v3.0 Plan ---------- - - Version 3.0 is primarily for those changes that will break - the ABI. (i.e. removing functions, changing function - signatures, etc.) This plan is very tenuous. Some of this - could slip to v4.0. - - o Remove all remaining query_reset function parameters, unless - the function doesn't actually override them. - - o Refactor option mechanism in Connection class into its own - class. There are a whole lot of functions, structs and - enums related to this. - - o Connection::bad_option() should save its built error message - in an instance variable, and Connection::error() should - use that when set, so you can get an explanation of option - setting errors when exceptions are disabled. - - o The Connection::connect() arguments for turning on compression - and setting the connection timeout should be removed. These - can be set directly using Connection::set_option(). - - o Add table creation ability to SSQLS. It has the schema, so... - - o SSQLS should allow table column order to differ from - structure field order. Not only will this decouple the - definitions, it will allow queries for a subset of the fields - without restricting you to the first N contiguous fields. - This will require doing a by-name lookup for each field - when populating it from the MYSQL_ROW object, but if you - need the highest possible speed, you shouldn't be using - SSQLS to begin with. - - o Evaluate whether Query's copy ctor should be made private. - Copying these objects probably never makes sense. - - o Rename Query::success() and Query::success_. The names imply - that they only have meaning once a query is tried, but - that isn't true. They're an indicator of whether the - object has had any problems at all, not just problems in - query execution. - - o Rename Query::def to Query::tquery_defaults. Makes its - purpose clearer. Also, examine all other public data - members, to see if they have a similar problem. - - o Connection::error() returns const char*, while Query::error() - returns std::string. Pick one. - - o Remove MutableColData. It's only used once in the library, - within myset.h, and that usage is inefficient to the point - of wanting replacement anyway. - - o Turn ColData_Tmpl into a concrete class. Use private - std::string instance as buffer, and replicate the std::string - interface publically, delegating to that buffer. - - o Use this new class in place of ColData_Tmpl, - and remove const_string class. - - o More robust fix for the Query stream base class init problem: - http://www.boost.org/libs/utility/base_from_member.html - - Requires inheritance change, which is why it has to be in v3. - - o Query::str() appends a null byte to the end of the string it - returns each time it is called. It is arguable whether it - should append a null byte at all, since std::string doesn't - need it. But even if it does, it at least should recognize - when the string already has a null, and not keep adding them - when it is called repeatedly. See this thread for details: - - http://lists.mysql.com/plusplus/6252 - - o Should sql_timestamp typedef not be for DateTime class, not Time - class? - - o Apply Richard Forrest's iterator patch. - - o The quote manipulator (and presumably the others as well) don't - work properly with char*. See this for details: - - http://lists.mysql.com/plusplus/5617 - - o Change the unsigned int overloads for operator[] on - const_subscript_iterator and its subclasses from unsigned - int to a plain int. This should fix the ambiguous overload - problems, such as with row[0]. - - See the following threads for reference: - http://lists.mysql.com/plusplus/4947 - http://lists.mysql.com/plusplus/4952 - http://lists.mysql.com/plusplus/4960 - - o Several MySQL++ functions wrap the MySQL C API too literally: - they indicate success by returning 0 instead of true, - as most other wrapper functions do. - - o Apply Waba's patch allowing Null fields in SSQLSes: - http://lists.mysql.com/plusplus/5433 - - o Deprecate sql_create_basic_* They have less functionality - and they're no easier to use than sql_create and friends. - - o Consider whether some of the current boilerplate can be - made into a base class that all SSQLSes derive from. Some - template functions like Query::insert might become regular - member functions, taking a reference to the SSQLS base class. - - o Abstract all uses of MySQL C API functions into a database - driver class with a generic interface. This is a step - towards database-independence, without the parallel class - hierarchy required by the MySQL++ 1.7 design. Also, it - will make it easier to make class Connection completely - friend-less. Right now, the main reason it needs friends - is because these other classes make C API calls using its - private MYSQL data member. The other reasons for it having - friends aren't nearly as compelling, so it wouldn't be - hard to justify redesigning Connection to eliminate these - final reasons. - - While it would be easy to have just one global database - driver object, it's probably going to be necessary to have - one per Connection. Consider what happens when you have one - program connected to two very different MySQL databases, - and you indirectly call C API functions that take MYSQL - parameters. It's likely that those calls are supposed - to behave different, depending on the data in that MYSQL - object; for instance, different character encodings in the - selected databases. So, there must somehow be a way to pass - the database driver's instance pointer down to all objects - that will need to use the driver. A side benefit is that - a single program could talk to multiple different database - server types. Imagine a program for importing data from - PostgreSQL and loading it into a MySQL table, for instance. - - o Query::preview() is just an alias for Query::str(). - Pick one. - - o Remove Query::execute(), store() and use() overloads taking - a SQLQueryParms object reference. With the changes in - v2.2 making the single SQLString overload the end-point - of the call chain, this just adds one more layer to the - call chain. Oh, sure, maybe there is someone out there who - uses this...but probably not. Much more likely it's just - an outdated step that adds nothing to the user experience. - - o The sense of Lockable::lock()'s return value is backwards. - It should return true if it succeeds in locking the object. - - o Remove simple const char* version of Query::execute(), - store(), and use()? SQLString already has a conversion - ctor taking a const char* string, so there should be no - need for this explicit overload. - - - -Future Features ---------------- - - These changes are not assigned to any particular version. - They could happen at any time. If you want one to appear at - some definite date, get coding and provide a patch! - - o SSQLS v2. Not sure how it will look yet, but there are ideas - in play, and patches to study. - - o Figure out some way to name debug DLL and library under VC++ - differently (trailing 'd'?) to prevent some problems due - to mixing debug and release programs and MySQL++ DLLs. - This appears to require changes to Bakefile, or some sort of - post-build hackery. - - o Create adaptors for std::bitset, for storing binary data in a - MySQL table. Make two options available, one for storing - the return from bitset::to_ulong() in an UNSIGNED INTEGER - column, and another for storing a larger set of bits in a - more flexible way, perhaps as a BLOB. - - o Row object currently depends on the associated ResUse object - to stick around through all calls to .at(), because it needs - the list of field types in the result set to construct - ColData objects. This means it's not possible to store - the result of several queries before accessing the data. - Currently, this is just a documented limitation, but it - would be nice if there were a clean way to avoid this. - Obviously you could just copy the type list when constructing - the Row object, but that seems pointlessly inefficient. - - o Define operator<< for Fields, Row, ResUse, etc. In other - words, there should be a way to get a user-readable version - of received data without a lot of code. Perhaps use a CSV - output format, or a mysql(1) one (ASCII grid). - - o manip.cpp uses mysql_escape_string(), which doesn't take the - selected database's character set into account. To do that, - you must use mysql_real_escape_string(), which differs - by taking a MYSQL instance as an additional parameter. - The problem is, Connection owns the relevant MYSQL instance, - and the manipulator functionality is implemented in global - functions (operator<<() and such) so they have no direct - access to the relevant Connection object. - - The key question for all operator<<'s for manipulators - to ask is, "which Query object am I being inserted into?" - From there, you can look up the associated Connection object. - - In some cases, this answer to the question is easy, because - the operator takes an ostream parameter, which can be - dynamically cast to Query. From there, it's just a lookup - table problem. - - Other operator<<'s don't take an ostream, but they do take - a manipulator. Right now, manipulators are just enum values, - but they could in fact be classes. Classes can carry data, - so there may be a way to "bind" them to the appropriate - Connection object. If not, then perhaps some other method - will pop out of the database driver class idea. The driver - object may be able to look up a suitable Connection object - for the manipulators. - - o MySQL++ handles automatic quoting and escaping differently - for cout and cerr than for Query streams. This should - probably be simplified so that automatic quoting is only - done for Query streams. No other stream type should be - treated specially. - - o Some field_list() functions use the do_nothing manipulator, - while others use the quote manipulator. Need to pick one. - In the vast majority of cases, quoting won't be necessary, - so make that the default. But, it should be possible to turn - it on, if needed. If all uses of quoting are in template - code, this can be a #define, allowing different programs - built on the same system to get different quoting rules. - Otherwise, it will probably have to be a configure script - flag, which will "burn" the choice into the built binary. - - o User-settable floating-point comparison precisions? - Something like this: http://lists.mysql.com/plusplus/3984 - As it currently stands, sql_cmp(double,double) is foolish. - One shouldn't do exact equality comparison on floating - point values. - - o Consider using MySQL C API enum constants in - mysql_type_info::types definition instead of hard-coded - values. This could potentially break a lot of - infrastructure, though, so do it only with care. - - o Support prepared statements. - ADDED autogen.sh Index: autogen.sh ================================================================== --- /dev/null +++ autogen.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +libtoolize --automake +aclocal +autoconf +autoheader + +for fn in AUTHORS ChangeLog NEWS README +do + if [ ! -e "$fn" ] + then + touch "$fn" + fi +done + +automake -a +./configure $* + DELETED bootstrap Index: bootstrap ================================================================== --- bootstrap +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -ARGS=1 -BF_OPTIONS= -while [ $ARGS != 0 ] -do - case "$1" in - nodoc) - BF_OPTIONS="-DBUILDDOCS=no $BF_OPTIONS" - shift - ;; - - noex) - BF_OPTIONS="-DBUILDEXAMPLES=no $BF_OPTIONS" - shift - ;; - - nolib) - BF_OPTIONS="-DBUILDLIBRARY=no $BF_OPTIONS" - shift - ;; - - noopt) - export CXXFLAGS="-g -O0" - shift - ;; - - pedantic) - export CXXFLAGS="-g -O2 -ansi -pedantic -Wall -W -Wold-style-cast -Wfloat-equal -Wwrite-strings -Woverloaded-virtual -Wno-long-long" - shift - ;; - - *) - ARGS=0 - ;; - esac -done - -rm -f config.cache -set -x - -./rebake $BF_OPTIONS && - bakefile -f gnu -o Makefile.simple -DBUILDLIBRARY=no mysql++.bkl && - aclocal -I config -I /usr/local/share/aclocal && - autoheader && - autoconf && - ./reconf --enable-maintainer-mode $* && - make lib/custom.h lib/querydef.h - DELETED cleanmf Index: cleanmf ================================================================== --- cleanmf +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -rm -f *.{ds?,ncb,sln,suo,vcproj} -rm -f Makefile -rm -f Makefile.{in,mingw,simple} ADDED config.cygwin Index: config.cygwin ================================================================== --- /dev/null +++ config.cygwin @@ -0,0 +1,104 @@ +####### Compiler, tools and options + +CC = g++ +CFLAGS = -DWINDOZE -D_WIN32 -O0 -mno-cygwin -D__cplusplus -Wall +-fstrength-reduce -D__WIN32__ -I/cygnus/cygwin-b20/include/g++ -I/cygnus/cygwin-b20/include/g++ -I/my/mysql_src/mysql-3.22.13-beta/include -L/my/mysql_src/mysql-3.22.13-beta/client/.libs -L../sqlplusint -mno-cygwin +#CFLAGS += -fkeep-inline-functions +# If you have problems when with undefined refrences try uncommenting +# the above line when compiling the library. But then recommenting +# it when you compile the examples. +FPIC =# -fPIC +INCPATH = -I/cygnus/cygwin-b20/include/g++ -I/my/mysql_src/mysql-3.22.13-beta/include # make sure you can find mysql.h +LINK = g++ +LFLAGS = -mno-cygwin # make sure you can find mysqlclinet +NLFLAGS = -lmysql++ # this is for the static lib test +SLFLAGS = -lmysql++ # this is for shared lib test +LIBS = -lmysqlclient -mno-cygwin +SOLLIBS = -lnsl -lsocket # extra lib that Solaris needs +ARC = ar rc +CP_R = cp -a +RMDIR = echo +#RMDIR = rmdir +#uncomment the above line if your sure your rmdir does NOT delete non-empty +#directories. If it does make remove could be DISASTORIUS. +INSTLIB = /usr/lib +INSTHEAD = /usr/include +INSTBIN = /usr/bin +PERLPATH = /usr/bin/perl + +#CFLAGS += -D NO_LONG_LONGS + +#TYPE = objs +TYPE = static +#TYPE = shared + +TARGET = linux +#TARGET = solaris +## + +# You should not need to modify anything below this line. If you do +# need to modify something below this line please email me at +# sinisa@cytanet.com.cy with what you did. + +ifeq ($(TARGET), solaris) + LIBS += $(SOLLIBS) +endif + +OBJSINT = coldata.o connection.o datetime.o field_names.o field_types.o \ + manip.o query.o result.o row.o set.o sql_query.o type_info.o vallist.o + +HEADERS = mysql++ mysql++.h mysql++-custom mysql++-custom.h + +HEADSINT = mysql++ defs \ + define_short coldata1.hh \ + type_info1.hh const_string1.hh \ + null1.hh compare1.hh row1.hh \ + resiter1.hh vallist1.hh manip1.hh \ + sql_string1.hh sql_query1.hh \ + sql_query0.hh datetime1.hh \ + stream2string1.hh tiny_int1.hh \ + set1.hh connection1.hh query1.hh \ + result1.hh field_names1.hh \ + tracker.h field_types1.hh \ + fields1.hh connection0.hh \ + convert1.hh coldata2.hh \ + compare2.hh connection2.hh \ + query2.hh const_string2.hh \ + convert2.hh datetime2.hh \ + stream2string2.hh field_names2.hh \ + field_types2.hh fields2.hh \ + manip2.hh null2.hh result2.hh \ + row2.hh set2.hh stream2string3.hh \ + sql_query2.hh sql_string2.hh \ + tiny_int2.hh type_info2.hh \ + vallist2.hh coldata3.hh \ + convert3.hh null3.hh compare3.hh \ + connection3.hh const_string3.hh \ + datetime3.hh field_names3.hh \ + field_types3.hh manip3.hh \ + query3.hh result3.hh row3.hh \ + set3.hh sql_query3.hh \ + sql_string3.hh tiny_int3.hh \ + type_info3.hh vallist3.hh \ + custom.hh custom-macros.hh + +####### Implicit rules + +.SUFFIXES: + +%.o: %.cc + $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + +%.o: %.c + $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + +%: %.o +ifeq ($(TYPE), objs) + $(CC) $(CFLAGS) $(LIBS) -o $@ ../sqlplusint/*.o $^ +endif +ifeq ($(TYPE), static) + $(CC) $(CFLAGS) $(NLFLAGS) $(LIBS) -o $@ $^ +endif +ifeq ($(TYPE), shared) + $(CC) $(CFLAGS) $(SLFLAGS) $(LIBS) -o $@ $^ +endif ADDED config.h.in Index: config.h.in ================================================================== --- /dev/null +++ config.h.in @@ -0,0 +1,52 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ +/* +** This file has been automatically generated by 'acconfig' from aclocal.m4 +** Copyright (C) 1988 Eleftherios Gkioulekas +** +** This file is free software; as a special exception the author gives +** unlimited permission to copy and/or distribute it, with or without +** modifications, as long as this notice is preserved. +** +** This program is distributed in the hope that it will be useful, but +** WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +** implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +/* This is the top section */ + + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +#undef SQLPLUS_MAJOR_VERSION +#undef SQLPLUS_MINOR_VERSION +#undef SQLPLUS_MICRO_VERSION +#undef SQLPLUS_INTERFACE_AGE +#undef SQLPLUS_BINARY_AGE + +/* Define if you have the strtol function. */ +#undef HAVE_STRTOL + +/* Define if you have the intl library (-lintl). */ +#undef HAVE_LIBINTL + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* Define if you have the socket library (-lsocket). */ +#undef HAVE_LIBSOCKET + +/* Name of package */ +#undef PACKAGE + +/* Version number of package */ +#undef VERSION + +/* Define if using the dmalloc debugging malloc package */ +#undef WITH_DMALLOC + +/* This is the bottom section */ + DELETED config/acx_pthread.m4 Index: config/acx_pthread.m4 ================================================================== --- config/acx_pthread.m4 +++ /dev/null @@ -1,233 +0,0 @@ -dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -dnl -dnl This macro figures out how to build C programs using POSIX -dnl threads. It sets the PTHREAD_LIBS output variable to the threads -dnl library and linker flags, and the PTHREAD_CFLAGS output variable -dnl to any special C compiler flags that are needed. (The user can also -dnl force certain compiler flags/libs to be tested by setting these -dnl environment variables.) -dnl -dnl Also sets PTHREAD_CC to any special C compiler that is needed for -dnl multi-threaded programs (defaults to the value of CC otherwise). -dnl (This is necessary on AIX to use the special cc_r compiler alias.) -dnl -dnl NOTE: You are assumed to not only compile your program with these -dnl flags, but also link it with them as well. e.g. you should link -dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS -dnl -dnl If you are only building threads programs, you may wish to -dnl use these variables in your default LIBS, CFLAGS, and CC: -dnl -dnl LIBS="$PTHREAD_LIBS $LIBS" -dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -dnl CC="$PTHREAD_CC" -dnl -dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute -dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE -dnl to that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -dnl -dnl ACTION-IF-FOUND is a list of shell commands to run if a threads -dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands -dnl to run it if it is not found. If ACTION-IF-FOUND is not specified, -dnl the default action will define HAVE_PTHREAD. -dnl -dnl Please let the authors know if this macro fails on any platform, -dnl or if you have any other suggestions or comments. This macro was -dnl based on work by SGJ on autoconf scripts for FFTW (www.fftw.org) -dnl (with help from M. Frigo), as well as ac_pthread and hb_pthread -dnl macros posted by Alejandro Forero Cuervo to the autoconf macro -dnl repository. We are also grateful for the helpful feedback of -dnl numerous users. -dnl -dnl @version $Id: acx_pthread.m4 1129 2005-10-04 17:53:10Z wyoung $ -dnl @author Steven G. Johnson - -AC_DEFUN([ACX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_SAVE -AC_LANG_C -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) - AC_MSG_RESULT($acx_pthread_ok) - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthread or - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [acx_pthread_ok=yes]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT($acx_pthread_ok) - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_MSG_CHECKING([for joinable pthread attribute]) - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_TRY_LINK([#include ], [int attr=$attr;], - [attr_name=$attr; break]) - done - AC_MSG_RESULT($attr_name) - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - AC_MSG_RESULT(${flag}) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - # More AIX lossage: must compile with cc_r - AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) -else - PTHREAD_CC="$CC" -fi - -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) - : -else - acx_pthread_ok=no - $2 -fi -AC_LANG_RESTORE -])dnl ACX_PTHREAD DELETED config/libm.m4 Index: config/libm.m4 ================================================================== --- config/libm.m4 +++ /dev/null @@ -1,37 +0,0 @@ -dnl @synopsis LIB_MATH -dnl -dnl This macro figures out how whether programs using C's math routines -dnl need to link to libm or not. This is common on SysV Unices. -dnl -dnl @category C -dnl @author Warren Young -dnl @version 1.2, 2006-03-06 - -AC_DEFUN([LIB_MATH], -[ - AC_MSG_CHECKING([whether -lm is needed to use C math functions]) - - MYSQLPP_EXTRA_LIBS= - TRY_LIBM=no - AC_TRY_LINK( - [ #include ], - [ floor(0); ], AC_MSG_RESULT(no), TRY_LIBM=yes) - - if test "x$TRY_LIBM" = "xyes" - then - save_LIBS=$LIBS - LIBS="$LIBS -lm" - AC_TRY_LINK( - [ #include ], - [ floor(0); ], - [ - MYSQLPP_EXTRA_LIBS=-lm - AC_MSG_RESULT(yes) - ], - AC_MSG_ERROR([Failed to build program containing math functions!])) - LIBS="$save_LIBS" - fi - - AC_SUBST(MYSQLPP_EXTRA_LIBS) -]) - DELETED config/localtime_r.m4 Index: config/localtime_r.m4 ================================================================== --- config/localtime_r.m4 +++ /dev/null @@ -1,30 +0,0 @@ -dnl @synopsis AX_C_LOCALTIME_R -dnl -dnl This macro determines whether the C runtime library contains -dnl localtime_r(), a thread-safe replacement for localtime(). -dnl -dnl @version 1.0, 2007/02/20 -dnl @author Warren Young -AC_DEFUN([AX_C_LOCALTIME_R], -[ - AC_MSG_CHECKING([for localtime_r()]) - - AC_TRY_RUN([ - #include - int main(void) - { - time_t tt; - struct tm stm; - localtime_r(&tt, &stm); - return 0; - } - ], [localtime_r_found=yes], [localtime_r_found=no], [localtime_r_found=no]) - - AC_MSG_RESULT([$localtime_r_found]) - if test x"$localtime_r_found" = xyes - then - AC_DEFINE(HAVE_LOCALTIME_R, 1, - [Define if you have the localtime_r() facility]) - fi -]) dnl AX_C_LOCALTIME_R - DELETED config/mysql++.m4 Index: config/mysql++.m4 ================================================================== --- config/mysql++.m4 +++ /dev/null @@ -1,131 +0,0 @@ -#-###################################################################### -# mysql++.m4 - Example autoconf macro showing how to find MySQL++ -# library and header files. -# -# Copyright (c) 2004-2005 by Educational Technology Resources, Inc. -# -# This file 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. -# -# This program 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 -#-###################################################################### - -dnl @synopsis MYSQLPP_DEVEL -dnl -dnl This macro tries to find the MySQL++ library and header files. -dnl -dnl We define the following configure script flags: -dnl -dnl --with-mysqlpp: Give prefix for both library and headers, and try -dnl to guess subdirectory names for each. (e.g. tack /lib and -dnl /include onto given dir name, and other common schemes.) -dnl --with-mysqlpp-lib: Similar to --with-mysqlpp, but for library only. -dnl --with-mysqlpp-include: Similar to --with-mysqlpp, but for headers -dnl only. -dnl -dnl This macro depends on having the default compiler and linker flags -dnl set up for building programs against the MySQL C API. The mysql.m4 -dnl macro in this directory fits this bill; run it first. -dnl -dnl @version 1.0, 2005/07/13 -dnl @author Warren Young - -AC_DEFUN([MYSQLPP_DEVEL], -[ -AC_CACHE_CHECK([for MySQL++ devel stuff], ac_cv_mysqlpp_devel, -[ - # - # Set up configure script macros - # - AC_ARG_WITH(mysqlpp, - [ --with-mysqlpp= path containing MySQL++ header and library subdirs], - [MYSQLPP_lib_check="$with_mysqlpp/lib $with_mysqlpp/lib/mysql++" - MYSQLPP_inc_check="$with_mysqlpp/include $with_mysqlpp/include/mysql++"], - [MYSQLPP_lib_check="/usr/local/mysql++/lib /usr/local/lib/mysql++ /opt/mysql++/lib /usr/lib/mysql++ /usr/local/lib /usr/lib" - MYSQLPP_inc_check="/usr/local/mysql++/include /usr/local/include/mysql++ /opt/mysql++/include /usr/local/include/mysql++ /usr/local/include /usr/include/mysql++ /usr/include"]) - AC_ARG_WITH(mysqlpp-lib, - [ --with-mysqlpp-lib= directory path of MySQL++ library], - [MYSQLPP_lib_check="$with_mysqlpp_lib $with_mysqlpp_lib/lib $with_mysqlpp_lib/lib/mysql"]) - AC_ARG_WITH(mysqlpp-include, - [ --with-mysqlpp-include= directory path of MySQL++ headers], - [MYSQLPP_inc_check="$with_mysqlpp_include $with_mysqlpp_include/include $with_mysqlpp_include/include/mysql"]) - - # - # Look for MySQL++ library - # - MYSQLPP_libdir= - for dir in $MYSQLPP_lib_check - do - if test -d "$dir" && \ - ( test -f "$dir/libmysqlpp.so" || - test -f "$dir/libmysqlpp.a" ) - then - MYSQLPP_libdir=$dir - break - fi - done - - if test -z "$MYSQLPP_libdir" - then - AC_MSG_ERROR([Didn't find the MySQL++ library dir in '$MYSQLPP_lib_check']) - fi - - case "$MYSQLPP_libdir" in - /* ) ;; - * ) AC_MSG_ERROR([The MySQL++ library directory ($MYSQLPP_libdir) must be an absolute path.]) ;; - esac - - AC_MSG_RESULT([lib in $MYSQLPP_libdir]) - - case "$MYSQLPP_libdir" in - /usr/lib) ;; - *) LDFLAGS="$LDFLAGS -L${MYSQLPP_libdir}" ;; - esac - - - # - # Look for MySQL++ headers - # - AC_MSG_CHECKING([for MySQL++ header directory]) - MYSQLPP_incdir= - for dir in $MYSQLPP_inc_check - do - if test -d "$dir" && test -f "$dir/mysql++.h" - then - MYSQLPP_incdir=$dir - break - fi - done - - if test -z "$MYSQLPP_incdir" - then - AC_MSG_ERROR([Didn't find the MySQL++ header dir in '$MYSQLPP_inc_check']) - fi - - case "$MYSQLPP_incdir" in - /* ) ;; - * ) AC_MSG_ERROR([The MySQL++ header directory ($MYSQLPP_incdir) must be an absolute path.]) ;; - esac - - AC_MSG_RESULT([$MYSQLPP_incdir]) - - CPPFLAGS="$CPPFLAGS -I${MYSQLPP_incdir}" - - AC_MSG_CHECKING([that we can build MySQL++ programs]) - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([#include ], - [std::string s; mysqlpp::escape_string(s)])], - ac_cv_mysqlpp_devel=yes, - AC_MSG_ERROR(no)) -])]) dnl End MYSQLPP_DEVEL - DELETED config/mysql_loc.m4 Index: config/mysql_loc.m4 ================================================================== --- config/mysql_loc.m4 +++ /dev/null @@ -1,112 +0,0 @@ -dnl @synopsis MYSQL_API_LOCATION -dnl -dnl This macro tries to find MySQL C API header and library locations. -dnl -dnl We define the following configure script flags: -dnl -dnl --with-mysql: Give prefix for both library and headers, and try -dnl to guess subdirectory names for each. (e.g. Tack /lib and -dnl /include onto given dir name, and other common schemes.) -dnl --with-mysql-lib: Similar to --with-mysql, but for library only. -dnl --with-mysql-include: Similar to --with-mysql, but for headers -dnl only. -dnl -dnl @version 1.2, 2007/02/20 -dnl @author Warren Young -AC_DEFUN([MYSQL_API_LOCATION], -[ - # - # Set up configure script macros - # - AC_ARG_WITH(mysql, - [ --with-mysql= root directory path of MySQL installation], - [MYSQL_lib_check="$with_mysql/lib/mysql $with_mysql/lib" - MYSQL_inc_check="$with_mysql/include $with_mysql/include/mysql"], - [MYSQL_lib_check="/usr/lib64 /usr/lib/x86_64-linux-gnu /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql" - MYSQL_inc_check="/usr/include/mysql /usr/local/include/mysql /usr/local/mysql/include/mysql /opt/mysql/include/mysql"]) - AC_ARG_WITH(mysql-lib, - [ --with-mysql-lib= directory path of MySQL library installation], - [MYSQL_lib_check="$with_mysql_lib $with_mysql_lib/lib64 $with_mysql_lib/lib $with_mysql_lib/lib64/mysql $with_mysql_lib/lib/mysql"]) - AC_ARG_WITH(mysql-include, - [ --with-mysql-include= directory path of MySQL header installation], - [MYSQL_inc_check="$with_mysql_include $with_mysql_include/include $with_mysql_include/include/mysql"]) - - # - # Decide which C API library to use, based on thread support - # - if test "x$acx_pthread_ok" = xyes - then - MYSQL_C_LIB=mysqlclient_r - else - MYSQL_C_LIB=mysqlclient - fi - - # - # Look for MySQL C API library - # - AC_MSG_CHECKING([for MySQL library directory]) - MYSQL_libdir= - for m in $MYSQL_lib_check - do - if test -d "$m" && \ - (test -f "$m/lib$MYSQL_C_LIB.so" || test -f "$m/lib$MYSQL_C_LIB.a") - then - MYSQL_libdir=$m - break - fi - done - - if test -z "$MYSQL_libdir" - then - AC_MSG_ERROR([Didn't find $MYSQL_C_LIB library in '$MYSQL_lib_check']) - fi - - case "$MYSQL_libdir" in - /* ) ;; - * ) AC_MSG_ERROR([The MySQL library directory ($MYSQL_libdir) must be an absolute path.]) ;; - esac - - AC_MSG_RESULT([$MYSQL_libdir]) - - case "$MYSQL_libdir" in - /usr/lib) ;; - *) LDFLAGS="$LDFLAGS -L${MYSQL_libdir}" ;; - esac - - - # - # Look for MySQL C API headers - # - AC_MSG_CHECKING([for MySQL include directory]) - MYSQL_incdir= - for m in $MYSQL_inc_check - do - if test -d "$m" && test -f "$m/mysql.h" - then - MYSQL_incdir=$m - break - fi - done - - if test -z "$MYSQL_incdir" - then - AC_MSG_ERROR([Didn't find the MySQL include dir in '$MYSQL_inc_check']) - fi - - case "$MYSQL_incdir" in - /* ) ;; - * ) AC_MSG_ERROR([The MySQL include directory ($MYSQL_incdir) must be an absolute path.]) ;; - esac - - AC_MSG_RESULT([$MYSQL_incdir]) - - CPPFLAGS="$CPPFLAGS -I${MYSQL_incdir}" - - save_LIBS=$LIBS - LIBS="$LIBS $MYSQLPP_EXTRA_LIBS" - AC_CHECK_LIB($MYSQL_C_LIB, mysql_store_result, [], [ - AC_MSG_ERROR([Could not find working MySQL client library!]) ]) - AC_SUBST(MYSQL_C_LIB) - LIBS=$save_LIBS -]) dnl MYSQL_API_LOCATION - DELETED config/mysql_ssl.m4 Index: config/mysql_ssl.m4 ================================================================== --- config/mysql_ssl.m4 +++ /dev/null @@ -1,17 +0,0 @@ -dnl @synopsis MYSQL_WITH_SSL -dnl -dnl This macro determines whether mysql_ssl_set() API call exists. -dnl Requires at least MySQL 4.0.1. -dnl -dnl @version $Id$, $Date$ -dnl @author Ovidiu Bivolaru -AC_DEFUN([MYSQL_WITH_SSL], -[ - # - # Check for mysql_ssl_set() in libmysqlclient(_r) - # - AC_CHECK_LIB($MYSQL_C_LIB, mysql_ssl_set, [ - AC_DEFINE(HAVE_MYSQL_SSL_SET,, Define if your MySQL library has SSL functions) - ]) dnl AC_CHECK_LIB(mysqlclient, mysql_ssl_set) -]) dnl MYSQL_WITH_SSL - DELETED config/socket_nsl.m4 Index: config/socket_nsl.m4 ================================================================== --- config/socket_nsl.m4 +++ /dev/null @@ -1,72 +0,0 @@ -dnl @synopsis LIB_SOCKET_NSL -dnl -dnl This macro figures out what libraries are required on this platform -dnl to link sockets programs. -dnl -dnl The common cases are not to need any extra libraries, or to need -dnl -lsocket and -lnsl. We need to avoid linking with libnsl unless -dnl we need it, though, since on some OSes where it isn't necessary it -dnl will totally break networking. Unisys also includes gethostbyname() -dnl in libsocket but needs libnsl for socket(). -dnl -dnl @category Misc -dnl @author Warren Young -dnl @version 1.5, 2006-03-06 - -AC_DEFUN([LIB_SOCKET_NSL], -[ - save_LIBS="$LIBS" - - AC_MSG_CHECKING([whether -lsocket is needed]) - TRY_LSOCKET=no - AC_TRY_LINK( - [ - #include - #include - #include - #include - ], - [ socket(AF_INET, SOCK_STREAM, 0); ], - AC_MSG_RESULT(no), TRY_LSOCKET=yes) - - if test "x$TRY_LSOCKET" = "xyes" - then - LIBS="-lsocket $LIBS" - AC_TRY_LINK( - [ - #include - #include - #include - #include - ], - [ socket(AF_INET, SOCK_STREAM, 0); ], - [ - MYSQLPP_EXTRA_LIBS="-lsocket $MYSQLPP_EXTRA_LIBS" - AC_MSG_RESULT(yes) - ], - AC_MSG_ERROR([failed to link using -lsocket!])) - fi - - AC_MSG_CHECKING([whether -lnsl is needed]) - TRY_LNSL=no - AC_TRY_LINK( - [ #include ], - [ gethostbyname("gna.org"); ], - AC_MSG_RESULT(no), TRY_LNSL=yes) - - if test "x$TRY_LNSL" = "xyes" - then - LIBS="-lnsl $LIBS" - AC_TRY_LINK( - [ #include ], - [ gethostbyname("gna.org"); ], - [ - MYSQLPP_EXTRA_LIBS="-lnsl $MYSQLPP_EXTRA_LIBS" - AC_MSG_RESULT(yes) - ], - AC_MSG_ERROR([failed to link using -lnsl!])) - fi - - AC_SUBST(MYSQLPP_EXTRA_LIBS) -]) - DELETED config/stl_slist.m4 Index: config/stl_slist.m4 ================================================================== --- config/stl_slist.m4 +++ /dev/null @@ -1,55 +0,0 @@ -dnl @synopsis STL_SLIST_EXTENSION -dnl -dnl This macro determines whether the local STL implementation includes -dnl a singly-linked list template, slist, and if so, where it is. -dnl -dnl @version 1.2, 2005/07/22 -dnl @author Warren Young -AC_DEFUN([STL_SLIST_EXTENSION], -[ - AC_MSG_CHECKING([for STL slist extension]) - - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include ], - [slist l])], - AC_DEFINE(HAVE_GLOBAL_SLIST, 1, - [ Define if you have ::slist container in ]), - TRY_NEXT=yes) - - if test -z "$TRY_NEXT" - then - SLIST_LOC=", global scope" - else - TRY_NEXT="" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include ], - [std::slist l])], - AC_DEFINE(HAVE_STD_SLIST, 1, - [ Define if you have std::slist container in ]), - TRY_NEXT=yes) - - if test -z "$TRY_NEXT" - then - SLIST_LOC=", namespace std" - else - TRY_NEXT="" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [#include ], - [__gnu_cxx::slist l])], - AC_DEFINE(HAVE_EXT_SLIST, 1, - [ Define if you have __gnu_cxx:slist container in ]), - SLIST_LOC="not found") - - if test -z "$SLIST_LOC" - then - SLIST_LOC=", namespace __gnu_cxx" - fi - fi - fi - - AC_MSG_RESULT([$SLIST_LOC]) -]) dnl STL_SLIST_EXTENSION - DELETED configure.ac Index: configure.ac ================================================================== --- configure.ac +++ /dev/null @@ -1,85 +0,0 @@ -# This file 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. -# -# This program 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 - -# Standard autotools stuff -AC_INIT(mysql++, 2.3.2, plusplus@lists.mysql.com, mysql++) -AC_CONFIG_HEADER(config.h) -AC_DISABLE_STATIC -AC_CANONICAL_SYSTEM -AC_PROG_CC -AC_PROG_CXX - - -# Break package version up into major, minor and bugfix components. -MYSQLPP_VERSION_MAJOR=`echo $PACKAGE_VERSION | cut -f1 -d.` -AC_SUBST(MYSQLPP_VERSION_MAJOR) -MYSQLPP_VERSION_MINOR=`echo $PACKAGE_VERSION | cut -f2 -d.` -AC_SUBST(MYSQLPP_VERSION_MINOR) -MYSQLPP_VERSION_BUGFIX=`echo $PACKAGE_VERSION | cut -f3 -d.` -AC_SUBST(MYSQLPP_VERSION_BUGFIX) - - -# Include Bakefile macros -AC_BAKEFILE([m4_include(config/autoconf_inc.m4)]) - - -# Check for Standard C support -AC_HEADER_STDC - - -# Figure out whether/how to handle threading support, if available. -AC_ARG_ENABLE(thread-check, - [ --enable-thread-check Check for threads, and use if available. ], - [ thread_check=yes ]) -if test "x$thread_check" = "xyes" -then - ACX_PTHREAD - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - CC="$PTHREAD_CC" -fi - - -# Checks for libraries and local system features -AC_CHECK_HEADERS(zlib.h, AC_CHECK_LIB(z, gzread, [], - [ AC_MSG_ERROR([zlib is required]) ])) -LIB_MATH -LIB_SOCKET_NSL -MYSQL_API_LOCATION -MYSQL_WITH_SSL -AX_C_LOCALTIME_R -AC_CHECK_LIB(intl, main) - - -# If this is Cygwin, add a linker flag to suppress a silly link message. -case "${host}" in - *cygwin*) - LDFLAGS="$LDFLAGS -Wl,--enable-auto-import" - ;; -esac - - -# Check for Standard C++ support, and extensions. This must be near -# the end, because the CPLUSPLUS directive makes autoconf use C++ -# compiler for all subsequent tests! -AC_LANG_CPLUSPLUS -STL_SLIST_EXTENSION - - -# -# Configure process complete; write out files generated from *.in. -# -AC_OUTPUT([Makefile mysql++.spec lib/Doxyfile lib/mysql++.h]) - ADDED configure.in Index: configure.in ================================================================== --- /dev/null +++ configure.in @@ -0,0 +1,116 @@ +dnl Process this file with autoconf to produce a configure script. +# require autoconf 2.13 +AC_PREREQ(2.13) + +AC_INIT(sqlplusint/sqlplus.hh) + +dnl Much of this was copied from glib's configure.in + +dnl we need to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they +dnl are available for $ac_help expansion (don't we all *love* autoconf?) +AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl +# +# Making releases: +# SQLPLUS_MICRO_VERSION += 1; +# SQLPLUS_INTERFACE_AGE += 1; +# SQLPLUS_BINARY_AGE += 1; +# if any functions have been added, set SQLPLUS_INTERFACE_AGE to 0. +# if backwards compatibility has been broken, +# set SQLPLUS_BINARY_AGE _and_ SQLPLUS_INTERFACE_AGE to 0. +# + +SQLPLUS_MAJOR_VERSION=1 +SQLPLUS_MINOR_VERSION=5 +SQLPLUS_MICRO_VERSION=0 +SQLPLUS_INTERFACE_AGE=0 +SQLPLUS_BINARY_AGE=0 + +SQLPLUS_VERSION=$SQLPLUS_MAJOR_VERSION.$SQLPLUS_MINOR_VERSION.$SQLPLUS_MICRO_VERSION +dnl +AC_DIVERT_POP()dnl + +VERSION=$SQLPLUS_VERSION + +AC_SUBST(SQLPLUS_MAJOR_VERSION) +AC_SUBST(SQLPLUS_MINOR_VERSION) +AC_SUBST(SQLPLUS_MICRO_VERSION) +AC_SUBST(SQLPLUS_INTERFACE_AGE) +AC_SUBST(SQLPLUS_BINARY_AGE) + +# libtool versioning +LT_RELEASE=$SQLPLUS_MAJOR_VERSION.$SQLPLUS_MINOR_VERSION +LT_CURRENT=`expr $SQLPLUS_MICRO_VERSION - $SQLPLUS_INTERFACE_AGE` +LT_REVISION=$SQLPLUS_INTERFACE_AGE +LT_AGE=`expr $SQLPLUS_BINARY_AGE - $SQLPLUS_INTERFACE_AGE` +AC_SUBST(LT_RELEASE) +AC_SUBST(LT_CURRENT) +AC_SUBST(LT_REVISION) +AC_SUBST(LT_AGE) + +dnl Initialize automake +AM_INIT_AUTOMAKE(sqlplus, $VERSION) + +dnl Set definition here +AM_CONFIG_HEADER(config.h) + +dnl Initialize libtool +AM_PROG_LIBTOOL + +dnl Initialize maintainer mode +AM_MAINTAINER_MODE + +dnl This is a little hack to make this work with rpm better (see sqlplus.spec.in) +test -z "$CXXFLAGS" && CXXFLAGS="${CFLAGS}" + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_CXXCPP + +dnl Copied from lf_texidoc.m4 in share/aclocal +AC_PATH_PROGS(PERL, perl perl5, nope) +if test "$PERL" = nope +then + AC_MSG_WARN([missing perl. Need perl to build documentation and some headers which should have been included in the distribution.]) +fi + + +AC_PROG_LN_S +AC_PROG_INSTALL +AC_PROG_MAKE_SET + +dnl These will be set in config.h +AC_DEFINE_UNQUOTED(SQLPLUS_MAJOR_VERSION, $SQLPLUS_MAJOR_VERSION) +AC_DEFINE_UNQUOTED(SQLPLUS_MINOR_VERSION, $SQLPLUS_MINOR_VERSION) +AC_DEFINE_UNQUOTED(SQLPLUS_MICRO_VERSION, $SQLPLUS_MICRO_VERSION) +AC_DEFINE_UNQUOTED(SQLPLUS_INTERFACE_AGE, $SQLPLUS_INTERFACE_AGE) +AC_DEFINE_UNQUOTED(SQLPLUS_BINARY_AGE, $SQLPLUS_BINARY_AGE) + +AC_CHECK_LIB(intl, main) +AC_CHECK_LIB(socket, main) +AC_CHECK_LIB(nsl, main) + +dnl ######################################################################### +dnl Check for MySQL headers and libraries +dnl ######################################################################### +AC_PACKAGE_MYSQL + +AM_WITH_DMALLOC() + +dnl Checks for header files. +AC_HEADER_STDC + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST + +dnl Checks for library functions. +AC_CHECK_FUNCS(strtol) + +AC_OUTPUT([ +Makefile +sqlplusint/Makefile +examples/Makefile +doc/Makefile +sqlplus-config +sqlplus.spec +]) ADDED doc/Makefile.am Index: doc/Makefile.am ================================================================== --- /dev/null +++ doc/Makefile.am @@ -0,0 +1,40 @@ +# This file should cause the manual to be a generated source (i.e., so +# that it is build at distribution time since its creation is +# non-standard) + +# This file still needs a lot of work... + +# SUBDIRS = man-html man-text + +EXTRA_DIST = \ + doc.tex.tmpl html.sty manual.aux manual.dvi manual.log manual.lyx \ + manual.ps manual.tex pretty.pl sql++pretty doc-fix.pl doc-trim.pl \ + examples-proc.pl html2txt.pl insert-classref.pl + +default: manual + +perlclean: + -rm -f manual.txt manual.html + $(MAKE) -C ../sqlplusint/ perlclean + +manual: + $(MAKE) -C ../sqlplusint/ classref + perl insert-classref.pl + -rm -f -r man-html + -mkdir man-html + perl examples-proc.pl + latex manual.tex + latex manual.tex + latex2html \ + -split 3 \ + -toc_depth 3 \ + -dir man-html \ + -long_titles 2 \ + -local_icons \ + -show_section_numbers \ + manual.tex + + -rm -f -r man-text + -mkdir man-text + perl html2txt.pl + DELETED doc/README.devel Index: doc/README.devel ================================================================== --- doc/README.devel +++ /dev/null @@ -1,11 +0,0 @@ -This file comes with the mysql++-devel RPM. This RPM installs the -files you need when building your own MySQL++ based programs, as well as -documentation and examples that can help you learn how to use the library. -The documentation is pretty badly out of date at the moment. See the -example programs for the "official" word on how to use this library. - -This RPM installs the MySQL++ header files in /usr/include/mysql++, -the MySQL++ library in /usr/lib, and a set of example programs in -/usr/src/mysql++/examples. For more information on the examples, see -the README.examples file in this directory. - DELETED doc/README.manuals Index: doc/README.manuals ================================================================== --- doc/README.manuals +++ /dev/null @@ -1,5 +0,0 @@ -For more information about MySQL++, see its home page: - - http://tangentsoft.net/mysql++/ - -See the LICENSE file in this directory for the library's license. ADDED doc/doc-fix.pl Index: doc/doc-fix.pl ================================================================== --- /dev/null +++ doc/doc-fix.pl @@ -0,0 +1,22 @@ +$/ = undef; + +open F, $ARGV[0]; + +$_=; + +s~\\begin_inset LatexCommand \\ref.+ +\\end_inset +(.+) +\\begin_inset LatexDel .+ +\\end_inset +.+ +\\begin_inset LatexDel .+ +\\end_inset +~\\begin_inset LatexCommand \\ref\{$1\} + +\\end_inset +~g; + +open F, ">$ARGV[0]"; +print F $_; + ADDED doc/doc-trim.pl Index: doc/doc-trim.pl ================================================================== --- /dev/null +++ doc/doc-trim.pl @@ -0,0 +1,11 @@ +$/ = undef; + +open F, $ARGV[0]; + +$_=; + +/(\\layout Section.+)\\the_end/s; + +open F, ">$ARGV[0]"; +print F $1; + ADDED doc/doc.tex.tmpl Index: doc/doc.tex.tmpl ================================================================== --- /dev/null +++ doc/doc.tex.tmpl @@ -0,0 +1,193 @@ +#ptags [ ] +[!autolink] + +[foreach class] +\section{[class]} +\label{[filter ref][class dont_filter][endfilter]} + +[if templ]template [endif] \ +[if struct]struct[endif][else][if union]union[endif][else]class[endelse][endelse] \ +\textbf{[class]}[templ] + +[if parents]\textbf{Parents:} [parents][endif] + +[if with_class][if with_class != [class]] + \textbf{Related to:} [with_class] \ + (\ref{[filter ref][with_class dont_filter][endfilter]}) +[endif][endif] + +[if brief]\textit{[brief]}[endif] + +[detail] + +\subsection{Synopses} + +[if public] +\textbf{Public members:} +\begin{itemize} +[foreach public] +\item [if pure]pure [endif][type] \textbf{[mname]} \ + [if func] \ + ([args]) [if const] const [endif] \ + [if throws] throws [throwclass]([throwargs])[endif] \ + [endif] \ + [if enum] [lb][args][rb] [endif] \ + [if detail] (\ref{[filter ref][class dont_filter]::[member dont_filter][endfilter]}) [endif] \ + [if brief] - \textit{[brief]}[endif] \ +[next] + +\end{itemize} +[endif] + +[if protected] +\textbf{Protected members:} +\begin{itemize} + +[foreach protected] +\item [if pure]pure [endif][type] \textbf{[mname]} \ + [if func] \ + ([args]) [if const] const [endif] \ + [if throws] throws [throwclass]([throwargs])[endif] \ + [endif] \ + [if enum] [lb][args][rb] [endif] \ + [if detail] (\ref{[filter ref][class dont_filter]::[member dont_filter][endfilter]}) [endif] \ + [if brief] - \textit{[brief]}[endif] \ +[next] + +\end{itemize} +[endif] + +[nobreak] +[foreach func] +[if with_class == [class]] +[if !l1][def l1] + \textbf{Related Functions} [n] + [n] + \begin{itemize} [n] +[endif] +\item [type] \textbf{[name]} ([args]) + [if throws] throws [throwclass]([throwargs]) [endif] + [if brief] - \textit{[brief]}[endif] [n] +[endif] +[next] +[if l1] [undef l1] + \end{itemize} [n] +[endif] +[endnobreak] + +[nobreak] +[foreach typedef] +[if with_class == [class]] + [if !l1] [def l1] + \textbf{Related Types} [n] + [n] + \begin{itemize} [n] + [endif] +\item [if typedef]typedef [endif][if enum]enum [endif][type] \textbf{[name]} + [if enum] [lb][args][rb] [endif] + [if brief] - \textit{[brief]}[endif] [n] +[endif] +[next] +[if l1] [undef l1] + \end{itemize} [n] +[endif] +[endnobreak] + +[nobreak] +[def pclass [class]] +[foreach class] +[if with_class == [pclass]] [if with_class != [class]] +[if !l1] [def l1] + \textbf{Related Classes} [n] + [n] + \begin{itemize} [n] +[endif] +\item [if templ]template [endif] + [if struct]struct[endif][else][if union]union[endif][else]class[endelse][endelse] + \textbf{[class]}[templ] + (\ref{[filter ref][class dont_escape][endfilter]}) + [if brief] - \textit{[brief]} [endif] [n] +[endif] [endif] +[next] +[if l1] [undef l1] + \end{itemize} [n] +[endif] +[undef pclass] +[endnobreak] + +[foreach public] +[if detail] +\subsection{[member]} +\label{[filter ref][class dont_filter]::[member dont_filter][endfilter]} + + [if pure]pure [endif][type] \textbf{[mname]} \ + [if func] \ + ([args]) [if const] const [endif] \ + [if throws] throws [throwclass]([throwargs])[endif] \ + [endif] \ + [if enum] [lb][args][rb] [endif] + +[if brief]\textit{[brief]}[endif] + +[detail] + +[endif] + +[next] + +[foreach func][if with_class == [class]][// ][if detail] +\subsection{[name]} + +[type] \textbf{[name]} ([args]) \ + [if throws] throws [throwclass]([throwargs]) [endif] + +[if brief]\textit{[brief]}[endif] + +[detail] + +[endif][endif][next] + +[next] + + +\section{Misc Non Members} + +[foreach func][if !with_class] +[if !f1] [def f1] + \textbf{Functions:} + \begin{itemize} +[endif] +\item [type] \textbf{[name]} ([args]) \ + [if throws] throws [throwclass]([throwargs]) [endif] \ + [if brief] - \textit{[brief]}[endif] +[endif][next] +[if f1] [undef f1] +\end{itemize} +[endif] + +[foreach typedef][if !with_class] +[if !tl] [def tl] + \textbf{Types:} + \begin{itemize} +[endif] +\item [if typedef]typedef [endif][if enum]enum [endif][type] \textbf{[name]} + [if enum] [lb][args][rb] [endif] + [if brief] - \textit{[brief]}[endif] +[endif][next] +[if tl] [undef tl] +\end{itemize} +[endif] + +[foreach func] +[if detail][if !with_class] +\subsection{[name]} + +[type] \textbf{[name]} ([args]) \ + [if throws] throws [throwclass]([throwargs]) [endif] + +[if brief]\textit{[brief]}[endif] + +[detail] + +[endif][endif] +[next] ADDED doc/examples-proc.pl Index: doc/examples-proc.pl ================================================================== --- /dev/null +++ doc/examples-proc.pl @@ -0,0 +1,20 @@ + +$/ = undef; +open IN, "manual.tex"; +$_ = ; + +s/\\begin\{comment\}[\n\s]+example:(\S+)[\n\s]*\\end\{comment\}[\n\s]*/${\(&ie($1))}/sg; + +open IN, ">manual.tex"; +print IN; + +sub ie { + my $return; + $return = "\n"; + $return .= "\\begin{verbatim}\n"; + open EIN, "examples/$_[0]"; + local $/ = undef; + $return .= ; + $return .= "\\end{verbatim}\n\n"; + return $return; +} ADDED doc/html2txt.pl Index: doc/html2txt.pl ================================================================== --- /dev/null +++ doc/html2txt.pl @@ -0,0 +1,7 @@ +opendir DIR, "man-html"; + +foreach (readdir(DIR)) { + next unless /(.+?)\.html$/; + print "lynx -dump man-html/$_ > man-text/$1.txt\n" ; + system "lynx -dump man-html/$_ > man-text/$1.txt" ; +} ADDED doc/insert-classref.pl Index: doc/insert-classref.pl ================================================================== --- /dev/null +++ doc/insert-classref.pl @@ -0,0 +1,22 @@ +$/ = undef; + +open F, "manual.tex"; +open CR, "../sqlplusint/doc.tex"; + +$_=; +$classref=; + +s~\\begin{comment}[\s\n]*Begin Class Ref[\s\n]*\\end{comment}.+?\\begin{comment}[\s\n]*End Class Ref[\s\n]*\\end{comment}~ +\\begin{comment} +Begin Class Ref +\\end{comment} +$classref +\\begin{comment} +End Class Ref +\\end{comment} +~s || die "Could not insert classref\n"; + +open F, ">manual.tex"; +print F $_; + + ADDED doc/manual.lyx Index: doc/manual.lyx ================================================================== --- /dev/null +++ doc/manual.lyx @@ -0,0 +1,13238 @@ +#This file was created by Thu Dec 2 15:59:50 1999 +#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team +\lyxformat 2.15 +\textclass book +\begin_preamble +\usepackage{html} + +\begin{htmlonly} + +\renewenvironment{lyxcode} + {\begin{list}{}{ + \setlength{\rightmargin}{\leftmargin} + \raggedright + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \ttfamily}% + \item[] + \begin{ttfamily}} + {\end{ttfamily} + \end{list} } + +\newenvironment{LyXParagraphIndent}[1]% +{\begin{quote}} +{\end{quote}} + +\end{htmlonly} +\end_preamble +\language default +\inputencoding default +\fontscheme default +\graphics default +\float_placement h +\paperfontsize 11 +\spacing single +\papersize Default +\paperpackage a4 +\use_geometry 1 +\use_amsmath 0 +\paperorientation portrait +\leftmargin 1in +\rightmargin 1in +\secnumdepth 2 +\tocdepth 2 +\paragraph_separation skip +\defskip medskip +\quotes_language english +\quotes_times 2 +\papercolumns 1 +\papersides 1 +\paperpagestyle default + +\layout Title + +Mysql++ +\newline +A C++ API for Mysql +\newline +ver 1.5 +\layout Author + +Kevin Atkinson +\newline +(kevinatk@home.com) +\newline + Sinisa Milivojevic +\newline +(sinisa@cytanet.com.cy) +\newline +Michael Widenius +\newline +(monty@mysql.com) +\layout Standard + + +\begin_inset LatexCommand \tableofcontents + +\end_inset + + +\layout Part* + +Introductory Material +\layout Chapter + +Introduction +\layout Section + +What is Mysql++ +\layout Standard + +Mysql++ is a complex C++ API for Mysql (And other SQL Databases Soon). + The goal of this API is too make working with Queries as easy as working + with other STL Containers. + See the Overview chapter ( +\begin_inset LatexCommand \ref{Overview} + +\end_inset + +) for the components that make up Mysql++. +\layout Section + +Getting Mysql++ +\layout Standard + +The latest version of Mysql++ can be found at the mysql++ web site at http://www. +mysql.com/download_mysql++.html +\layout Section + +Mysql++ Mailing List +\layout Standard + +Instructions for joining the mailing list (and an archive of the mailing + list) can be found off the Mysql++ home page at http://www.mysql.com/download_mys +ql++.html. + If you just wish to ask questions, you can mail to mysql-plusplus@lists.mysql.com. +\layout Chapter + +Overview +\layout Standard + + +\begin_inset LatexCommand \label{Overview} + +\end_inset + +The Mysql++ API has developed into a very complex and powerful being. + With many different ways to accomplish the same task. + Unfortunately this means that figuring out how to perform a simple task + can be frustrating for new users of my library. + In this section I will attempt to provide an overview of the many different + components of the library. +\layout Standard + +Like working with most other SQL API the process for executing queries is + the same. + 1) You open the connection, 2) You form and execute the queries, 3) You + iterate through the result set. + It not much different in my C++ API. + However there is a lot of extra functionality along each step of the way. +\layout Section* + +The Main Database Handle +\layout Standard + +This is a class that handles the connection to the Mysql server. + You always need at least one of these objects to do anything. + It can either create a separate queries object or directly execute queries. + The separate query object is the recommended way as it gives you far more + power. +\layout Section* + +The Query Object +\layout Standard + +This object is the recommended way of executing queries. + It is subclassed from strstream which means you can write to it like any + other stream to aid in the formation of queries. +\layout Standard + +You can also set up Template queries with this class. + Template queries are a way of setting up queries with replaceable parameters + that you can change throughout your program. +\layout Standard + +You can also use specialized structures and even the dramatic result sets + to aid in creating queries however more on that latter. +\layout Standard + +The Query object returns an object with information about the success of + a query for non-select queries (queries that don't return a result set). +\layout Section* + +The Result Sets +\layout Standard + +For queries that return a result set you have essentially two different + ways of handling the results: in a dramatic result set, or in a static + one. +\layout Subsection* + +The Dramatic Result Set +\layout Standard + +The Dramatic Result set is a result set in which the names of the columns + and the type of information of the columns does not need to be determined + at compile time. + The result set can be completely constant in which the data is returned + to you in a constant string link class, semi-constant in which you can + modify the data one row at a time, or a truly mutable in which in you can + modify the data in any way you like. +\layout Standard + +The constant result set is a result set that is closely bound to the result + set in the C API and is the one that provides the most functionality. + With this result set you can find out detailed information about the type + of information stored in each of the columns. + This is also the fastest because the data does not need to be copied at + all. +\layout Standard + +The semi-constant result set is like the constant result set except you + can modify the data one row at a time. + The data you modify is actually a copy of the data returned by the server. + This means that modifying the data does not change the actual result set + at all. +\layout Standard + +The semi-constant result set is actually the same thing as the constant + result set. + The only difference is that when you request a row from the result set + you specifically declare the row as a mutable one. + This means that you can get some rows back as constant rows and others + as mutable ones. +\layout Standard + +The truly mutable result set is a result set similar to the constant one + except that the data is truly mutable in the sense that you can change + the data in the actual result set. + However unlike the first one this result set is not bound to the C API + result set. + Instead it containers a copy of the data returned by the C API in a two-dimensi +onal vector. + Because of this the detailed information about each of the columns is not + currently available, only the column names and the C++ type that most closely + matches the original SQL type. + Also, because it makes a copy of the data returned from the C API, there + is a little bit of performance penalty to using this one. +\layout Standard + +The rows in all the dramatic result sets are very close to an Standard Template + Library (STL) random access container. + This means that they have an iterator which can be used for STL algorithms. + There is even couple of specialized utility function to aid in the use + of the result sets in STL algorithms. +\layout Standard + +The columns in all the dramatic result are also very close to an STL random + access container. + However, in addition to accessing the columns by there index number you + can also access the columns via there field names. +\layout Standard + +In addition, because both the rows and the columns are STL like containers, + you can also treat the result set as a two- dimensional array. + For example you can get the 5th item on the 2nd row by simply saying result[2][ +5]. + Because you can also use the field names you can substitute the column + number by a field name and say result[2]["price"] to get "price" of the + item on the 2nd row, for example. +\layout Standard + +The actual data that all the dramatic result sets return is stored in a + special string like class that has some additional magic too it. + The magic is that the column data will automatically convert itself into + all of the basic data types as well as some additional types types that + are designed to handle mysql types which includes types for handling dates, + times, sets, and types with a null value. + If there is a problem in the conversion it will either set a warning flag + or throw an exception depending on how it is configured. +\layout Standard + +The drastic result sets can even be used to help form queries with the help + of some additional method. + There is a method for returns: 1) A comma separated list of the data (for + example: 1.5, 10, "Dog, "Brown"), 2) A comma separated list of the field + names (for example: age, weight, what, color), and 3) An equal list (for + example: age = 1.5 AND weight = 10 AND what = "Dog" AND color = "Brown"). +\layout Standard + +Mutable result sets can be created with out an actual query so that you + can take advantage of these methods to aid in inserting data into the database + with out having to first create an unnecessary query. +\layout Subsection* + +The Static Result Sets +\layout Standard + +The results from an query can also be stored statically in what I call a + specialized SQL structure. + These structures are then stored in some STL container such a vector or + list, or even a set or multi-set as the the specialized structures can + also be made less-than-comparable. + Unlike the dramatic result sets it is assumed that the programmer knows + what the result set is going to look like. + Because of this all the information about the columns, including the names, + are lost. +\layout Standard + +These Specialized Structures are exactly that C++ `structs'. + Each member item is stored with a unique name within the structure. + You can in no way use STL algorithms or anything else STL to work with + the individual elements of the structures. + However naturally because these structures are then stored in STL containers + you can use STL algorithms on the containers of these structures. + The containers represent the rows, and the individual elements of the structure + represent the columns. + For example you can access the item named "price" on the second row by + saying result[2].price. + With the dramatic result set you would have probably needed to say result[2]["p +rice"] to accomplish the same result. +\layout Standard + +If there is a problem in converting from the result set returned by the + server to the specialized structures an exception is thrown. +\layout Standard + +To aid in the creating of queries using these specialized structures, the + same query aiding methods are available to use that are available for the + dramatic result sets. + This includes methods for returning a comma separated list of the data, + a comma separated list of the field names, and an equal list. +\layout Section* + +In addition +\layout Standard + +In addition to the material mentioned there are also many generic classes + that can be used with other programs. + Examples of this include a special const string class, a const random access + adapter that will make a random access container out of a class with nothing + but the size() method and the subscript ([]) operator defined and a generic + SQL query class that can be used any SQL C or C++ API. +\layout Chapter + +Important Changes +\layout Standard + +I will try to keep the changes that will break old code to a minimal however + when I do I will document them here. + Once this library goes into alpha testing this section will no longer exist + as I will try very hard not to make changes that will break old code. +\layout Section + +Current Changes +\layout Itemize + +Changed the syntax of equal_list for SSQLS from +\series bold +equal_list (cchar *, Manip, cchar *) +\series default + to +\series bold +equal_list (cchar *, cchar *, Manip) +\series default +. +\layout Itemize + +Mysql++ now runs with egcs. + But +\noun on +beware !, +\noun toggle + do not yet use -O6 -mpentium options are still unsafe for g++, with a heavy + use of constant and static initializers, and especially with C++ exceptions + . + Also, please try to keep all objects as local as possible. + Declare it in the lowest blocks always !! +\layout Itemize + +MySQL++ now runs with gcc 2.95.1 and 2. + Keeping objects local is no more necessary. +\layout Itemize + +The +\begin_inset Quotes eld +\end_inset + +connection +\begin_inset Quotes erd +\end_inset + + constructors for +\series bold +Connection +\series default + and +\series bold +Connection::connect +\series default + (formally known as +\series bold +Mysql +\series default +) has changed so that the data base name is the first paremeter. + The same is valid for connect method. +\layout Itemize + +All new client feature implemented in 3.22.xx as various options on connect + are mplemented in a new constructor and real_connect method +\layout Itemize + +Also new configuration constructs in 3.23.xx are strictly followed +\layout Itemize + +Mysql++ now can be compiled on Win32 with use of Cygwin compiler from Cygnus + Inc. +\layout Itemize + +Autoconf and Automake are fully implemented +\layout Itemize + +The Specialized SQL Structures (formally known as Custom Mysql Structures) + changed from mysql_ to sql_. +\layout Itemize + +Changed all of the functions that return zero (false) on success and non-zero + (true) other wise to bool. + This means that they now return true on success and false on faillier. + This means that you now need to negate your expressions that test the output + of these functions. + +\layout Itemize + +Almost all methods that returned MysqlString now return a normal string. + Because +\series bold +MysqlString +\series default + objects will convert them selves into string when needed there should not + be a problem with: +\begin_deeper +\layout LyX-Code + +MysqlString s = mysql.host_info +\end_deeper +\layout Itemize + +The data type +\series bold +MysqlRow +\series default + now returns ( +\series bold +MysqlString +\series default + or +\series bold +MysqlColData +\series default +) is now subclassed from a special string class that I wrote to handle working + with a const string in a much more efficient way (ie it doesn't copy it). + Unfortunitlly this data type is also more limited see the section on "const_str +ing" for more info. +\layout Itemize + +All necessary methods pertaining to the administration funcitons have been + added +\layout Section + +Future Changes +\layout Itemize + +The behavior of MysqlString when used with binary operators is going to + change in a future version (if I can figure out how to pull it off) Instead + of converting to the type on the other side of the operator the MysqlString + will it convert to the type the Mysql server said it originally was. + This will be a lot safer and more predictable. +\layout Part* + +Usage +\layout Chapter + +Tutorial by Example +\layout Section + +Introduction +\layout Standard + +This tutorial is meant to give you a jump start into using my API. + My Mysql++ API is a very complicated being with a lot of advance features + that you can due without if all you want to do is execute simple queries. +\layout Section + +Assumptions +\layout Standard + +This tutorial assumes you know C++ fairly well, inparticuler it assumes + you know about the Standard Template Library (STL) and exceptions. +\layout Section + +Running the Examples +\layout Standard + +All of the example code form complete running programs. + However in order to use them you need to first compile them my switching + to the examples directory and typing in +\family typewriter +make +\family default +. + Then you need to set up the database by running reset-db. + The usage of the reset-db program is as follows. +\layout LyX-Code + +reset-db [host [user [password]]] +\layout Standard + +If you leave off host localhost is assumed. + If you leave off user your current username is assumed. + If you leave of the password it is assumed that you don't need one. +\layout Standard + +When you first run the program you need to give it an account with permission + to create databases. + Once the database is created you can use any account that has permission + full permission to the database mysql_cpp_data. + +\layout Standard + +You should also run the reset-db program between examples that modify the + data or else things might not work right. +\layout Section + +The Basics +\layout Subsection + +A Simple Example +\layout Standard + +The following example demonstrates how to open a connection, execute a simple + query, and display the results. + The code can be found in the file +\family typewriter +simple1.cc +\family default + which is located in the examples directory. +\layout Comment + +example:simple1.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + Connection con("mysql_cpp_data"); +\newline + +\protected_separator + // The full format for the Connection constructor is +\newline + +\protected_separator + // Connection(cchar *db, cchar *host="", +\newline + +\protected_separator + // +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cchar *user="", cchar *passwd="") +\newline + +\protected_separator + // You may need to specify some of them if the database is not on +\newline + +\protected_separator + // the local machine or you database username is not the same as your +\newline + +\protected_separator + // login name, etc.. +\newline + +\protected_separator + +\newline + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + // This creates a query object that is bound to con. +\newline + +\protected_separator + +\newline + +\protected_separator + query << "select * from stock"; +\newline + +\protected_separator + // You can write to the query object like you would any other ostrem +\newline + +\protected_separator + +\newline + +\protected_separator + Result res = query.store(); +\newline + +\protected_separator + // Query::store() executes the query and returns the results +\newline + +\protected_separator + +\newline + +\protected_separator + cout << "Query: " << query.preview() << endl; +\newline + +\protected_separator + // Query::preview() simply returns a string with the current query +\newline + +\protected_separator + // string in it. +\newline + +\protected_separator + +\newline + +\protected_separator + cout << "Records Found: " << res.size() << endl << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + Row row; +\newline + +\protected_separator + cout.setf(ios::left); +\newline + +\protected_separator + cout << setw(17) << "Item" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(4) +\protected_separator + << "Num" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << "Weight" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << "Price" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "Date" << endl +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + Result::iterator i; +\newline + +\protected_separator + // The Result class has a read-only Random Access Iterator +\newline + +\protected_separator + for (i = res.begin(); i != res.end(); i++) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row = *i; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw(17) << row[0] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(4) +\protected_separator + << row[1] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << row["weight"] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // you can use either the index number or column name when +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // retrieving the colume data as demonstrated above. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << row[3] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << row[4] << endl; +\newline + +\protected_separator + } +\newline + +\protected_separator + return 0; +\newline +} +\layout Standard + +Everything here should be fairly obvious. + Take particular notice of how I used an iterator with the result set. +\layout Subsection + +A slightly more complicated example +\layout Standard + +This example is almost like the previous one however it uses exceptions + and the automatic conversion feature of +\series bold +ColData +\series default +. + Pay particular notice to how exceptions are used. + This file for this code is named +\family typewriter +complic1.cc +\family default +. +\layout Comment + +example:complic1.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + try { // its in one big try block +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con(use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Here I broke making the connection into two calls. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // The first one creates the Connection object with the +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // use exceptions option turned on and the second one +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // makes the connection +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "select * from stock"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Result res = query.store(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Query: " << query.preview() << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Records Found: " << res.size() << endl << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Row row; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.setf(ios::left); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw(17) << "Item" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(4) +\protected_separator + << "Num" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << "Weight" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << "Price" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "Date" << endl +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Result::iterator i; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.precision(3); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + for (i = res.begin(); i != res.end(); i++) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + row = *i; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw(17) << row["item"] << setw(4) << row[1] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) +\protected_separator + << (double)row[2] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// This is converting the row to a double so that we +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// can set the precision of it. +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// ColData has the nice feature that it will convert to +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// any of the basic c++ types. +\protected_separator + if there is a problem +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// in the conversion it will throw an exception (which I +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// cache below). +\protected_separator + To test it try changing the 2 in row[2] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// to row[0] +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(7) << (double)row[3]; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + Date date = row["sdate"]; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // The ColData is implicitly converted to a date here. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout.setf(ios::right); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout.fill('0'); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw(2) << date.month << "-" << setw(2) << date.day << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout.fill(' '); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout.unsetf(ios::right); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return 0; +\newline + +\protected_separator + } catch (BadQuery er) { // handle any connection or +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // query errors that may come up +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } catch (BadConversion er) { // handle bad conversions +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\layout Standard + +Everything should be fairly obvious. + A few notes about exceptions, however: +\layout Enumerate + +When the +\series bold +use_exceptions +\series default + flag is set for a parent object it is also set for all of its children + the it created after the flag is set. + For example when the +\series bold +use_exceptions +\series default + flag is set for the +\family typewriter +con +\family default + object, it is also set for the +\family typewriter +query +\family default + object. + Please note that the +\series bold +use_exceptions +\series default + flag is not linked, it is copied. + This means that when you change the +\series bold +use_exceptions +\series default + flag only its new children are affected, +\emph on +not +\emph default + the ones it already created. +\layout Enumerate + + +\series bold +ColData +\series default + will always throw an exception when it encounters a bad conversion. + A bad conversion is defined as a conversion in which: a) All the charters + from the string are not read in and b) The remaining characters are something + other than whitespace, zeros (0), or periods (.). + This means that when ``1.25'' is converted into an int an exception will + be thrown however not when ``1.00'' is converted into an int as the remaining + characters are the period and the zero. + +\layout Standard + +To see how the exception work try creating an error. + Some good things to try would be misspelling the table name or changing + the double to an int. +\layout Subsection + +Getting Info about the Fields +\layout Standard + +The following example demonstrates how to get some basic information about + the fields, including the name of the field and the SQL type. + The file is called fieldinfo1.cc. +\layout Comment + +example:fieldinf1.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + try { // its in one big try block +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con(use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "select * from stock"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Result res = query.store(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Query: " << query.preview() << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Records Found: " << res.size() << endl << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Query Info: +\backslash +n"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.setf(ios::left); +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + for (unsigned int i = 0; i < res.size(); i++) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw(2) +\protected_separator + << i +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(15) << res.names(i).c_str() +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// this is the name of the field +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(15) << res.types(i).sql_name() +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// this is the SQL identifier name +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// Result::types(unsigned int) returns a mysql_type_info which in many +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// ways is like type_info except that it has additional sql type +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// information in it. + (with one of the methods being sql_name()) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw(20) << res.types(i).name() +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// this is the C++ identifier name which most closely resembles +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// the sql name (its is implementation defined and often not very readable) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + if (res.types(0) == typeid(string)) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Field 'item' is of an sql type which most closely resembles a +\backslash +n" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "the c++ string type +\backslash +n"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // this is demonstrating how a mysql_type_info can be compared with a c++ +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // type_info. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + if (res.types(1) == typeid(short int)) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Field 'num' is of an sql type which most closely resembles a +\backslash +n" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "the c++ short int type +\backslash +n"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + else if (res.types(1).base_type() == typeid(short int)) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Field 'num' base type is of an sql type which most closely +\backslash +n" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "resembles a the c++ short int type +\backslash +n"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // However you have to be careful as if it can be null the actual type + is +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Null not TYPE. +\protected_separator + So you should always use the base_type method +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // to get at the underlying type. +\protected_separator + If the type is not null than this base +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // type would be the same as its type. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return 0; +\newline + +\protected_separator + } catch (BadQuery er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } catch (BadConversion er) { // handle bad conversions +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\newline + +\protected_separator + +\layout Section + +Specialized SQL Structures +\layout Subsection + +Retrieving Data +\layout Standard + +The next example demonstrates a fairly interesting concept known as Specialized + SQL Structures (SSQLS). + The file name for this code is +\family typewriter +custom1.cc +\family default +. +\layout Comment + +example:custom1.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline +#include +\newline +#include +\newline + +\protected_separator + +\newline +sql_create_5 (stock, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// struct name, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 1, 5, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// I'll explain these latter +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + string, item, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// type, id +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + int, num, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + double, weight, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + double, price, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + Date, sdate) +\newline + +\protected_separator + +\newline +// this is calling a very complex macro which will create a custom +\newline +// struct "stock" which has the variables: +\newline +// +\protected_separator + +\protected_separator + string item +\newline +// +\protected_separator + +\protected_separator + +\protected_separator + int num +\newline +// +\protected_separator + +\protected_separator + +\protected_separator + ... +\newline +// +\protected_separator + +\protected_separator + +\protected_separator + Date sdate +\newline +// defined as well methods to help populate the class from a mysql row +\newline +// among other things that I'll get too in a latter example +\newline + +\protected_separator + +\newline +int main () { +\newline + +\protected_separator + try { +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// its in one big try block +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con (use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect ("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query (); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "select * from stock"; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + vector < stock > res; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.storein (res); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // this is storing the results into a vector of the custom struct +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // "stock" which was created my the macro above. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.setf (ios::left); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw (17) << "Item" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (4) << "Num" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << "Weight" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << "Price" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "Date" << endl +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Now we we iterate through the vector using an iterator and +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // produce output similar to that using Row +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Notice how we call the actual variables in i and not an index +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // offset. +\protected_separator + This is because the macro at the begging of the file +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // set up an *actual* struct of type stock which contains the +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // variables item, num, weight, price, and data. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.precision(3); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + vector ::iterator i; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + for (i = res.begin (); i != res.end (); i++) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw (17) << i->item.c_str () +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// unfortunally the gnu string class does not respond to format +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// modifers so I have to convert it to a conat char *. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (4) << i->num +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << i->weight +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << i->price +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << i->sdate +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return 0; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + } catch (BadQuery er){ // handle any connection +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // or query errors that may come up +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + +\newline + +\protected_separator + } catch (BadConversion er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // we still need to cache bad conversions incase something goes +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // wrong when the data is converted into stock +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\layout Standard + +As you can see. + SSQLS are very powerful things. +\layout Subsection + +Adding Data +\layout Standard + +SSQLS can also be used to add data to a table. + The file name for this code is custom2.cc +\layout Comment + +example:custom2.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline +#include +\newline +#include "util.hh" +\newline +// util.hh/cc contains the print_stock_table function +\newline + +\protected_separator + +\newline +sql_create_5(stock, 1, 5, string, item, int, num, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + double, weight, double, price, Date, sdate) +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + try { // its in one big try block +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con(use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + stock row; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // create an empty stock object +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + /* +\protected_separator + +\protected_separator + +\protected_separator + row.item = "Hot Dogs"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.num = 100; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.weight = 1.5; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.price = 1.75; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.sdate = "1998-09-25"; */ +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.set("Hot Dogs", 100, 1.5, 1.75, "1998-09-25"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // populate stock +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.insert(row); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // form the query to insert the row +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // the table name is the name of the struct by default +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Query : " << query.preview() << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // show the query about to be executed +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // execute a query that does not return a result set +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + print_stock_table(query); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // now print the new table; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + } catch (BadQuery er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } catch (BadConversion er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\layout Standard + +That's all there is to it. + Because this example modifies the data you should run +\family typewriter +reset-db +\family default + after running the example code. +\layout Subsection + +Modifying Data +\layout Standard + +And it almost as easy to modify data with SSQLS. + The file name is custom3.cc. +\layout Comment + +example:custom3.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline +#include +\newline +#include "util.hh" +\newline +// util.hh/cc contains the print_stock_table function +\newline + +\protected_separator + +\newline +sql_create_5(stock, 1, 5, string, item, int, num, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + double, weight, double, price, Date, sdate) +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + try { // its in one big try block +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con(use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "select * from stock where item = +\backslash +"Hotdogs' Buns +\backslash +" "; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Result res = query.store(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + if (res.empty()) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + throw BadQuery("Hotdogs' Buns not found in table, run reset-db"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // here we are testing if the query was successful, if not throw a bad + query +\newline + +\protected_separator + +\protected_separator + +\protected_separator + stock row = res[0]; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // because there should only be one row in this query we don't +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // need to use a vector. +\protected_separator + Just store the first row directly in +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // "row". +\protected_separator + We can do this because one of the constructors for +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // stock takes a Row as an parameter. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + stock row2 = row; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Now we need to create a copy so that the replace query knows +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // what the original values are. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + row.item = "Hotdog Buns"; // now change item +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.update(row2, row); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // form the query to replace the row +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // the table name is the name of the struct by default +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Query : " << query.preview() << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // show the query about to be executed +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // execute a query that does not return a result set +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + print_stock_table(query); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // now print the new table; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + } catch (BadQuery er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } catch (BadConversion er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\layout Standard + +When you run the example you will notice that in the where clause only the + +\emph on +item +\emph default +field is checked for. + This is because SSQLS also also less-than-comparable. +\layout Standard + +Don't forget to run +\family typewriter +reset-db +\family default + after running the example. +\layout Subsection + +Less-Than-Comparable +\layout Standard + +SSQLS are can also be made less-than-comparable. + This means that they can be sorted and stored in sets as demonstrated in + the next example. + The file name is custom4.cc +\layout Comment + +example:custom4.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline +#include +\newline +#include +\newline +#include +\newline + +\protected_separator + +\newline +sql_create_5(stock, +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 1, // This number is used to make a SSQLS less-than-comparable. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // If this number is n then if the first n elements are the +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // same the two SSQLS are the same. +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // In this case if two two stock's "item" are the same then +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // the two stock are the same. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + 5, // this number should generally be the same as the number of +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // elements in the list unless you have a good reason not to. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + string,item, +\protected_separator + int,num, +\protected_separator + double,weight, +\protected_separator + double,price, +\protected_separator + Date,sdate) +\newline + +\protected_separator + +\newline +int main() { +\newline + +\protected_separator + try { // its in one big try block +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Connection con(use_exceptions); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + con.connect("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = con.query(); +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "select * from stock"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + set res; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.storein(res); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // here we are storing the elements in a set not a vector. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.setf (ios::left); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw (17) << "Item" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (4) << "Num" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << "Weight" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << "Price" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "Date" << endl +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Now we we iterate through the set. +\protected_separator + Since it is a set the list will +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // naturally be in order. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + set::iterator i; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cout.precision(3); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + for (i = res.begin (); i != res.end (); i++) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << setw (17) << i->item.c_str () +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (4) << i->num +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << i->weight +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << setw (7) << i->price +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << i->sdate +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + i = res.find(stock("Hamburger Buns")); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + if (i != res.end()) +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Hamburger Buns found. +\protected_separator + Currently " << i->num << " in stock. +\backslash +n"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + else +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + cout << "Sorry no Hamburger Buns found in stock +\backslash +n"; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Now we are using the set's find method to find out how many +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // Hamburger Buns are in stock. +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return 0; +\newline + +\protected_separator + +\newline + +\protected_separator + } catch (BadQuery er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } catch (BadConversion er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: Tried to convert +\backslash +"" << er.data << " +\backslash +" to a +\backslash +"" +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << er.type_name << " +\backslash +"." << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\layout Subsection + +And There's More +\layout Standard + +This is only scratching the surface of what SSQLS can do for more information + see the chapter on them ( +\begin_inset LatexCommand \ref{SSQLS} + +\end_inset + +). +\layout Section + +Template Queries +\layout Standard + +Another powerful feature of Mysql++ is being able to set up template queries. + The following example demonstrates how to use them. + This code is the actual code used to set up and/or reset the sample database. + It can be found under reset-db.cc. + I hope to come up with some better examples soon. +\layout Comment + +example:reset-db.cc +\layout LyX-Code-Sans + +#include +\newline +#include +\newline + +\protected_separator + +\newline +int main (int argc, char *argv[]) { +\newline + +\protected_separator + Connection connection(use_exceptions); +\newline + +\protected_separator + try { // the entire main block is one big try block; +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + if (argc == 1) connection.connect(""); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + else if (argc == 2) connection.connect("",argv[1]); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + else if (argc == 3) connection.connect("",argv[1],argv[2]); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + else if (argc <= 4) connection.connect("",argv[1],argv[2],argv[3]); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // create a new object and connect based on any (if any) arguments +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // passed to main(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + try { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + connection.select_db("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } catch (BadQuery er) { +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // if it couldn't connect to the database assume that it doesn't exist +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // and try created it. +\protected_separator + If that does not work exit with an error. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + connection.create_db("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + connection.select_db("mysql_cpp_data"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + Query query = connection.query(); +\protected_separator + // create a new query object +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + try { // ignore any errors here +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + // I hope to make this simpler soon +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + query.execute("drop table stock"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + } catch (BadQuery er) {} +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "create table stock +\protected_separator + (item char(20) not null, num smallint," +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + << "weight double, price double, sdate date)"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute(RESET_QUERY); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // send the query to create the table and execute it. +\protected_separator + The +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // RESET_QUERY tells the query object to reset it self after +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // execution +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query << "insert into %5:table values (%0q, %1q, %2, %3, %4q)"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.parse(); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // set up the template query I will use to insert the data. +\protected_separator + The +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // parse method call is important as it is what lets the query +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // know that this is a template and not a literal string +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.def["table"] = "stock"; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // This is setting the parameter named table to stock. +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute ("Hamburger Buns", 56, 1.25, 1.1, "1998-04-26"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute ("Hotdogs' Buns" +\protected_separator + +\protected_separator + ,65, 1.1 , 1.1, "1998-04-23"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute ("Dinner Roles" +\protected_separator + , 75, +\protected_separator + .95, .97, "1998-05-25"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + query.execute ("White Bread" +\protected_separator + +\protected_separator + , 87, 1.5, 1.75, "1998-09-04"); +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // The last parameter "table" is not specified here. +\protected_separator + Thus +\newline + +\protected_separator + +\protected_separator + +\protected_separator + // the default value for "table" is used which is "stock". +\newline + +\protected_separator + +\newline + +\protected_separator + } catch (BadQuery er) { // handle any errors that may come up +\newline + +\protected_separator + +\protected_separator + +\protected_separator + cerr << "Error: " << er.error << endl; +\newline + +\protected_separator + +\protected_separator + +\protected_separator + return -1; +\newline + +\protected_separator + } +\newline +} +\newline + +\protected_separator + +\layout Chapter + +Class Reference +\layout Standard + +This chapter documents all of the classes that are meant to be used. + If it is not documented here +\series bold +don't use it +\series default + because it is a internal method or class meant to only be used by other + related classes. +\layout Comment + +Begin Class Ref +\layout Standard + + +\begin_inset LatexCommand \label{SQLQuery} + +\end_inset + + +\begin_inset LatexCommand \label{SQLQueryParms} + +\end_inset + + +\layout Comment + +End Class Ref +\layout Section + +Manipulators +\layout Standard + +The following manipulators modify only the next item to the right of it + in an +\family typewriter +<< +\family default + chain. + They can be used with any ostream (which includes +\series bold +SQLQuery +\series default + and +\series bold +Query +\series default + because they are also ostreams) or +\series bold +SQLQueryParms +\series default +. + When used with +\series bold +SQLQueryParms +\series default + they will override any settings set by the Template Query for that particular + item. +\layout Description + +quote Quote and escape the next item. + Can be used with +\series bold +ostream +\series default + or +\series bold +SQLQueryParms +\series default +. + +\layout Description + +quote_only Quote but don't escape the next item. + Can be used with +\series bold +ostream +\series default + or +\series bold +SQLQueryParms +\series default +. + +\layout Description + +quote_only_double Quote, but don't escape the next item, with `` instead + of '. + +\layout Description + +escape Escape the next item. + +\layout Description + +do_nothing Does exactly what it says nothing. + Used as a dummy manipulator when you are required to use some manipulator. + When used with +\series bold +SQLQueryParms +\series default + it will make sure that it does not get formatted in any way overriding + any setting set by the template query. + +\layout Description + +ignore Only valid when used with +\series bold +SQLQueryParms +\series default +. + Like +\series bold +do_nothing +\series default + however this one will not override formatting set by the template query, + thus it is ignored. + +\layout Chapter + +Template Queries +\layout Standard + +The idea of template queries is too provide a query with replaceable parameters + that can be changed between query calls with out having to reform the queries. +\layout Section + +Setting Them Up +\layout Standard + +To set up a template query simply enter the query like it is a normal query. + For example: +\layout LyX-Code + +query << "select (%2:field1, %3:field2) from stock where %1:wheref = %q0:what" +\layout Standard + +And then execute the Query::parse() method. + For example: +\layout LyX-Code + +query.parse() +\layout Section + +Template Format +\begin_inset LatexCommand \label{template format} + +\end_inset + + +\layout Standard + +An example template looks like this +\layout LyX-Code + +select (%2:field1, %3:field2) from stock where %1:wheref = %q0:what +\layout Standard + +The numbers represent the element number in +\series bold +SQLQueryParms +\series default + (see the next section). + +\layout Standard + +The format of the substation parameter is: +\layout LyX-Code + +%(modifier)##(:name)(:) +\layout Standard + +Where Modifier can be any one of the following: +\layout Description + +% Print an actual "%" +\layout Description + +"" "" means nothing. + Don't quote or escape no matter what. + +\layout Description + +q This will quote and escape it using mysql_escape_string if it is a string + or char *, or another Mysql specific types that needs to be quoted. + +\layout Description + +Q Quote but don't escape based on the same rules. + This can save a bit of time if you know the strings will never need quoting + +\layout Description + +r Always quote and escape even if it is a number. + +\layout Description + +R Always quote but don't escape even if it is a number. + +\layout Standard + +## represents a number up to two digits +\layout Standard + +``:name'' is for an optional name which aids in filling SQLQueryParms. + Name can contain any alpha-numeric characters or the underscore. + If you use name it must be proceeded by non-alpha-numeric charter. + If this is not the case add a column after the name. + If you need to represent an actual colon after the name follow the name + by two-columns. + The first one will end the name and the second one won't be processed. + +\layout Section + +Setting the Parameters +\layout Standard + +The parameters can either be set when the query is executed or ahead of + time by using default parameters. +\layout Subsection + +At Execution Time +\layout Standard + +To specify the parameters when you want to execute a query simply use +\series bold +Query::store(const SQLString &parm0, [..., const SQLString &parm11]) +\series default + (or +\series bold +Query::use +\series default + or +\series bold +Query::execute +\series default +). + Where +\series bold +parm0 +\series default + corresponds to parameter number 0, etc. + You may specify from 1 to 12 different parameters. + For example: +\layout LyX-Code + +Result res = query.store("Dinner Roles", "item", "item", "price") +\layout Standard + +with the template query provided in section +\begin_inset LatexCommand \ref{template format} + +\end_inset + + would produce: +\layout LyX-Code + +select (item, price) from stock where item = "Dinner Roles" +\layout Standard + +The reason for why I +\emph on +didn't +\emph default + make the template the more logical: +\layout LyX-Code + +select (%0:field1, %1:field2) from stock where %2:wheref = %q3:what +\layout Standard + +will become apparent shortly. +\layout Subsection + +Using Defaults +\layout Standard + +You can also set the parameters one at a time by means of the public data + member +\series bold +def +\series default +. + To change the values of the +\series bold +def +\series default + simply use the subscript operator. + You can refer to the parameters either by number or by name. + For example: +\layout LyX-Code + +query.def[0] = "Dinner Roles"; +\newline +query.def[1] = "item"; +\newline +query.def[2] = "item"; +\newline +query.def[3] = "price"; +\layout Standard + +and +\layout LyX-Code + +query.def["what"] = "Dinner Roles"; +\newline +query.def["wheref"] = "item"; +\newline +query.def["field1"] = "item"; +\newline +query.def["field2"] = "price"; +\layout Standard + +would both have the same effect. +\layout Standard + +Once all the parameters are set simply execute as you would have executed + the query before you knew about template queries. + For example: +\layout LyX-Code + +Result res = query.store() +\layout Subsection + +Combining the Two +\layout Standard + +You can also combine the use of setting the parameters at execution time + and setting them by use of the +\series bold +def +\series default + object by simply using the extended form of +\series bold +Query::store +\series default + (or +\series bold +use +\series default + or +\series bold +execute +\series default +) without all of necessary parameters specified. + For example: +\layout LyX-Code + +query.def["field1"] = "item"; +\newline +query.def["field2"] = "price"; +\newline +Result res1 = query.store("Hamburger Buns", "item"); +\newline +Result res2 = query.store(1.25, "price"); +\layout Standard + +Would store the query: +\layout LyX-Code + +select (item, price) from stock where item = "Hamburger Buns" +\layout Standard + +for +\family typewriter + res1 +\family default +and +\layout LyX-Code + +select (item, price) from stock where price = 1.25 +\layout Standard + +for +\family typewriter +res2 +\family default +. +\layout Standard + +Because the extended form of +\series bold +Query::store +\series default + can only effect the beginning (by number not by location) parameters the + more logical template query: +\layout LyX-Code + +select (%0:field1, %1:field2) from stock where %2:wheref = %q3:what +\layout Standard + +would +\emph on +not +\emph default +of worked in this case. + Thus the more twisted ordering of +\layout LyX-Code + +select (%2:field1, %3:field2) from stock where %1:wheref = %q0:what +\layout Standard + +was needed so that we can specify +\series bold +wheref +\series default + and +\series bold +what +\series default + each time. +\layout Standard + +One thing to watch out for, however, is that +\series bold +Query::store(const char* q) +\series default + is also defined for executing the query +\family typewriter +q +\family default +. + For this reason when you use the +\series bold +Query::store +\series default + (or +\series bold +use +\series default +, or +\series bold +execute +\series default +) with only one item and that item is a +\series bold +const char* +\series default + you need to explicitly convert it into a SQLString. + For example: +\layout LyX-Code + +Result res = query.store(SQLString("Hamburger Buns")). +\layout Subsection + +Error Handling +\layout Standard + +If for some reason you did not specify all the parameters when executing + the query +\emph on +and +\emph default + the remaining parameters do not have there values set via +\family typewriter +def +\family default + the query object will throw a +\series bold +SQLQueryNEParms +\series default + object. + In which case you you can find out what happened by checking the value + of +\series bold +SQLQueryNEParms::string +\series default +. + +\layout Standard + +For example: +\layout LyX-Code + +query.def["field1"] = "item"; +\newline +query.def["field2"] = "price"; +\newline +Result res = query.store(1.25); +\layout Standard + +would throw +\series bold +SQLQueryNEParms +\series default + because the +\family typewriter +wheref +\family default + is not specified. +\layout Standard + +In theory this exception should never be thrown. + If the exception is thrown it probably a logic error on you part. + (Like in the above example) +\layout Subsection + +More Advanced Stuff +\layout Standard + +To be written. + However, for now see the class +\series bold +SQLQuery +\series default + ( +\begin_inset LatexCommand \ref{SQLQuery} + +\end_inset + +) and +\series bold +SQLQueryParms +\series default + ( +\begin_inset LatexCommand \ref{SQLQueryParms} + +\end_inset + +) for more information. +\layout Chapter + +Specialized SQL Structures +\begin_inset LatexCommand \label{SSQLS} + +\end_inset + + +\layout Standard + +The Specialized SQL Structures (SSQLS) allows you create structures to hold + data for mysql queries with extra functionality to make your life easier. + These structures are in no way related to any Standard Template Library + (STL) type of containers. + These structures are exactly that +\series bold +structs +\series default +. + Each member item is stored with a unique name within the structure. + You can in no way use STL algorithms are anything else STL to work with + the individual structures. + However you CAN use these structures as the +\series bold +value_type +\series default + for STL containers. + (They would be pretty useless if you couldn't.) +\layout Section + +sql_create_basic +\layout Standard + +The following command will create a basic mysql query for use with the + sample database. + +\layout LyX-Code + +sql_create_basic_5(stock, +\protected_separator +0, +\protected_separator +0, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date) +\protected_separator + +\layout Standard + +This will set up the following structure: +\layout LyX-Code + +struct +\protected_separator +stock +\protected_separator +{ +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock +\protected_separator +() +\protected_separator +{} +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock +\protected_separator +(const MysqlRow +\protected_separator +&row); +\newline + +\protected_separator + +\protected_separator +set (const MysqlRow &row); +\newline + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +string +\protected_separator +item; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +int +\protected_separator +num; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +double +\protected_separator +weight; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +double +\protected_separator +price; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +MysqlDate +\protected_separator +date; +\protected_separator + +\newline +}; +\protected_separator + +\layout Standard + +As you can see this is nothing fancy. + The main advantage of this simple structure is the +\series bold +stock (MysqlRow &row) +\series default + constructor which allows you to easily populate a vector of stocks like + so: +\layout LyX-Code + +vector +\protected_separator +result; +\protected_separator + +\protected_separator + +\newline +query.storein(result); +\protected_separator + +\layout Standard + +That's all there is two it. + The requirements are that the query returns elements in the same order + as you specified them in the custom structure. + +\layout Standard + +The general format is: +\layout LyX-Code + +sql_create_basic_#(NAME, +\protected_separator +0, +\protected_separator +0, +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +... +\protected_separator +TYPE#, +\protected_separator +ITEM#) +\protected_separator + +\protected_separator + +\layout Standard + +Where # is the number of valuables in the vector, NAME is the name of the + structure you wish to create, and TYPE1 is the type name for first item + and ITEM1 is the valuables name for the first item etc.. + +\layout Section + +sql_create_basic with compare +\layout Standard + +You can also make the structure comparable by changing the first 0 in the + previous example to a non zero number. + This number, lets call it n, will tell c++ that if the first n number + or the same then the two structures are the same. + +\layout Standard + +For example: +\layout LyX-Code + +sql_create_basic_5(stock, +\protected_separator +1, +\protected_separator +0, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date) +\protected_separator + +\layout Standard + +will create a structure where only the item valuable is checked to see if + two different stocks are the same. + It also allows you to compare one structure to another based on the value + of item. + (If n is greater than one it will compare the structures in a Lexicographic + order. + For example if it was 2 it would first compare +\family typewriter +item +\family default + and if item was the same it would then compare +\family typewriter +num +\family default +. + If num was the same it would declare the two structures the same.) +\layout Standard + +In addition what the previous example defines it also defines the following: + +\layout LyX-Code + +struct +\protected_separator +stock +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +... +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock +\protected_separator +(const +\protected_separator +string +\protected_separator +&p1); +\newline + +\protected_separator + +\protected_separator +set (const string &p1); +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +== +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +!= +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +> +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +< +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +>= +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +bool +\protected_separator +operator +\protected_separator +<= +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +int +\protected_separator +cmp +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +int +\protected_separator +compare +\protected_separator +(const +\protected_separator +stock +\protected_separator +&other) +\protected_separator +const; +\protected_separator + +\newline +} +\protected_separator + +\newline + +\protected_separator + +\newline +int +\protected_separator +compare +\protected_separator +(const +\protected_separator +stock +\protected_separator +&x, +\protected_separator +const +\protected_separator +stock +\protected_separator +&y); +\protected_separator + +\layout Standard + +int compare (const stock &x, const stock &y) compares x to y and return + <0 if x < y, 0 if x = y, and >0 if x > y. + stock::cmp and stock::compare are the same thing as compare(*this, other). + +\layout Standard + +stock::stock is a constructor that will set item to p1 and leave the other + variables undefined. + This is useful for creating temporary objects to use for comparisons like + x <= stock("Hotdog"). + +\layout Standard + +Because +\series bold +stock +\series default + is now less-then-comparable you can store the query results in a set: +\layout LyX-Code + +set +\protected_separator +result; +\protected_separator + +\protected_separator + +\newline +query.storein(result); +\protected_separator + +\layout Standard + +And you can now use it like any other set, for example: +\layout LyX-Code + +cout +\protected_separator +<< +\protected_separator +result.lower_bound(stock("Hamburger"))->item +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\protected_separator + +\layout Standard + +will return the first item that begins with Hamburger. + +\layout Standard + +You can also now use it will any STL algorithm that require the values to + be less-then-comparable. + +\layout Standard + +The general format so far is: +\layout LyX-Code + +sql_create_base_#(NAME, +\protected_separator +CMP, +\protected_separator +0, +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +... +\protected_separator +TYPE#, +\protected_separator +ITEM#) +\protected_separator + +\protected_separator + +\layout Standard + +where CMP is that the number that tells c++ that if the first cmp variables + are the same then the two structures are the same. + +\layout Section + +sql_create_basic with Additional Constructor +\layout Standard + +The last zero in the last example if for creating another constructor. + Let this zero be m then it will create a constructor which will populate + the first n variables. + For example: +\layout LyX-Code + +sql_create_basic_5(stock, +\protected_separator +1, +\protected_separator +5, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date) +\protected_separator + +\layout Standard + +will also define: +\layout LyX-Code + +struct +\protected_separator +stock +\protected_separator +{ +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +... +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock(const +\protected_separator +string&, +\protected_separator +const +\protected_separator +int&, +\protected_separator +const +\protected_separator +double&, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +const +\protected_separator +double&, +\protected_separator +const +\protected_separator +MysqlDate&); +\protected_separator + +\newline + +\protected_separator + +\protected_separator +set(const +\protected_separator +string&, +\protected_separator +const +\protected_separator +int&, +\protected_separator +const +\protected_separator +double&, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +const +\protected_separator +double&, +\protected_separator +const +\protected_separator +MysqlDate&); +\protected_separator + +\newline +} +\protected_separator + +\layout Section + +sql_create_basic General Format +\layout Standard + +Thus the general format for sql_create_basic is +\layout LyX-Code + +sql_create_basic_#(NAME, +\protected_separator +CMP, +\protected_separator +CNST, +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +..., +\protected_separator +TYPE#, +\protected_separator +ITEM#) +\protected_separator + +\protected_separator + +\layout Standard + +Where: +\layout Itemize + +# is the number of valuables in the vector +\layout Itemize + +NAME is the name of the structure you wish to create +\layout Itemize + +CMP is the number that tells c++, if not set to 0, that if the first cmp + variables are the same then the two structures are the same. + +\layout Itemize + +CNST is the number, if not set to 0, that will create a constructor which + will populate the first n variables. + +\layout Itemize + +TYPE1 is the type name for first item and ITEM1 is the valuables name for + the first item etc.. + +\layout Section + +sql_create_basic_c_order +\layout Standard + +You can also specify an alternate order for when mysql populates the structure. + For example: +\layout LyX-Code + +sql_create_basic_c_order_5(stock, +\protected_separator +2, +\protected_separator +5, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date, +\protected_separator +5, +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator +order +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator +4, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +1, +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator +2, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator +3) +\protected_separator + +\layout Standard + +This will create a similar structure as in the previous example except that + that the order of the data items will be different and c++ will use the + first two items to compare with (date, price). + However because a custom order is specified you can use the same query + to populate the set. + It will fill +\family typewriter +date +\family default + with the first 5th item of the query result set, +\family typewriter +price +\family default + with the 4th, etc... + +\layout Section + +sql_create_basic_c_order General Format +\layout Standard + +Thus the general format for sql_create_basic is +\layout LyX-Code + +sql_create_basic_c_order_# +\protected_separator +(NAME, +\protected_separator +CMP, +\protected_separator +CNST, +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +ORDER1, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +... +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE#, +\protected_separator +ITEM#, +\protected_separator +ORDER#) +\protected_separator + +\layout Standard + +Where: +\layout Itemize + +# is the number of valuables in the vector +\layout Itemize + +NAME is the name of the structure you wish to create +\layout Itemize + +CMP is the number that tells c++, if not set to 0, that if the first cmp + variables are the same then the two structures are the same. + +\layout Itemize + +CNST is the number, if not set to 0, that will create a constructor which + will populate the first n variables. + +\layout Itemize + +TYPE1 is the type name for first item, ITEM1 is the valuable name for the + first item, ORDER1 is the order number for the first item ...etc... + +\layout Section + +sql_create +\layout Standard + +In addition to the basic structures you can set up enhanced structures that + also have methods defined to aid in the creation of queries and in the + insertion of data in tables. + +\layout Standard + +For example: +\layout LyX-Code + +sql_create_5(stock, +\protected_separator +1, +\protected_separator +5, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date) +\protected_separator + +\layout Standard + +which will, in addition to that which is defined in sql_create_basic with + Additional Constructor, define the equivalent to: +\layout LyX-Code + +struct +\protected_separator +stock +\protected_separator +{ +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +... +\protected_separator + +\newline + +\protected_separator + +\protected_separator +static +\protected_separator +char +\protected_separator +*names[]; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +static +\protected_separator +char +\protected_separator +*table; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_value_list +\protected_separator +value_list(cchar +\protected_separator +*d +\protected_separator += +\protected_separator +",", +\protected_separator + +\protected_separator +// +\protected_separator +basic +\protected_separator +form +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +Manip +\protected_separator +m +\protected_separator += +\protected_separator +mysql_quote) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_field_list +\protected_separator +field_list(cchar +\protected_separator +*d +\protected_separator += +\protected_separator +",", +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +Manip +\protected_separator +m +\protected_separator += +\protected_separator +mysql_do_nothing) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_equal_list +\protected_separator +equal_list(cchar +\protected_separator +*d +\protected_separator += +\protected_separator +",", +\layout LyX-Code + + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +cchar *e = " = ", +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +Manip +\protected_separator +m +\protected_separator += +\protected_separator +mysql_quote, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// +\protected_separator +bool +\protected_separator +form +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_cus_value_list +\protected_separator +value_list([cchar +\protected_separator +*d, +\protected_separator +[Manip +\protected_separator +m,] +\protected_separator +] +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +bool +\protected_separator +i1, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +bool +\protected_separator +i2 +\protected_separator += +\protected_separator +false, +\protected_separator +... +\protected_separator +, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +bool +\protected_separator +i5 +\protected_separator += +\protected_separator +false) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// +\protected_separator +list +\protected_separator +form +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_cus_value_list +\protected_separator +value_list([cchar +\protected_separator +*d, +\protected_separator +[Manip +\protected_separator +m,] +\protected_separator +] +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +stock_enum +\protected_separator +i1, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +stock_enum +\protected_separator +i2 +\protected_separator += +\protected_separator +stock_NULL, +\protected_separator +..., +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +stock_enum +\protected_separator +i5 +\protected_separator += +\protected_separator +stock_NULL) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\protected_separator +template +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +// +\protected_separator +vector +\protected_separator +form +\protected_separator + +\newline + +\protected_separator + +\protected_separator +stock_cus_value_list +\protected_separator +value_list([cchar +\protected_separator +*d, +\protected_separator +[Manip +\protected_separator +m,] +\protected_separator +] +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +vector +\protected_separator +*i) +\protected_separator +const; +\protected_separator + +\newline + +\protected_separator + +\newline + +\protected_separator + +\protected_separator +...(The +\protected_separator +logical +\protected_separator +equivalent +\protected_separator +for +\protected_separator +field_list +\protected_separator +and +\protected_separator +equal_list)... +\protected_separator + +\newline +}; +\protected_separator + +\layout Standard + + +\series bold +value_list() +\series default + returns a special class that when used with the << operator with an ostream + on the left will return a comma separated list with values properly quoted + and escaped when needed. + +\layout Standard + + +\series bold +field_list() +\series default + return a special class than does the same thing but returns a list of + fields that the structure holds which in this case is the same thing as + the valuable names. + The field names are not escaped or quoted +\layout Standard + + +\series bold +equal_list() +\series default + returns a comma separated list with the format +\series bold +field name = value +\series default +. + The field name is not quoted or escaped and value is escaped or quoted + as needed. + +\layout Standard + +For example: +\layout LyX-Code + +stock +\protected_separator +s("Dinner +\protected_separator +Roles",75,0.95,0.97,"1998-05-25"); +\protected_separator + +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +"Value +\protected_separator +List: +\protected_separator +" +\protected_separator +<< +\protected_separator +s.comma_list() +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +"Field +\protected_separator +List: +\protected_separator +" +\protected_separator +<< +\protected_separator +s.field_list() +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +"Equal +\protected_separator +List: +\protected_separator +" +\protected_separator +<< +\protected_separator +s.equal_list() +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\layout Standard + +Would return something like (with a little extra hand formating): +\layout LyX-Code + +Value +\protected_separator +List: +\protected_separator +'Dinner +\protected_separator +Roles',75,0.95,0.97,'1998-05-25' +\protected_separator + +\protected_separator + +\newline +Field +\protected_separator +List: +\protected_separator +item,num,weight,price,date +\protected_separator + +\newline +Equal +\protected_separator +List: +\protected_separator +item +\protected_separator += +\protected_separator +'Dinner +\protected_separator +Roles',num +\protected_separator += +\protected_separator +75,weight +\protected_separator += +\protected_separator +0.95, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +price +\protected_separator += +\protected_separator +0.97,date +\protected_separator += +\protected_separator +'1998-05-25' +\protected_separator + +\layout Standard + +A combination of the field and value list can be used for insert or replace + queries. + For example: +\layout LyX-Code + +query +\protected_separator +<< +\protected_separator +"insert +\protected_separator +into +\protected_separator +stock +\protected_separator +(" +\protected_separator +<< +\protected_separator +s.field_list() +\protected_separator +") +\protected_separator +values +\protected_separator +" +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +<< +\protected_separator +s.value_list(); +\protected_separator + +\layout Standard + +will insert +\family typewriter +s +\family default + into table stock. + +\layout Standard + +You can also use SQLQuery::insert or SQLQuery::replace (and thus Query::insert + or Query::replace) as a short cut to accomplish the same task like so: + +\layout LyX-Code + +query.insert(s); +\layout Standard + +It will use s.table for the table name which defaults to the name of the + structure. + +\layout Standard + +You can also specify an different delimiter "d". + If none is specified it defaults to ",". + With this you can use the delimiter " AND " for equal_list to aid in update + and select queries. + For example: +\layout LyX-Code + +stock +\protected_separator +s2 +\protected_separator += +\protected_separator +s; +\protected_separator + +\protected_separator + +\protected_separator + +\newline +s2.item +\protected_separator += +\protected_separator +"6 +\protected_separator +Dinner +\protected_separator +Roles"; +\protected_separator + +\newline +query +\protected_separator +<< +\protected_separator +"UPDATE +\protected_separator +TABLE +\protected_separator +stock +\protected_separator +SET +\protected_separator +" +\protected_separator +<< +\protected_separator +s2.equal_list() +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +<< +\protected_separator +" +\protected_separator +WHERE +\protected_separator +" +\protected_separator +<< +\protected_separator +s.equal_list(" +\protected_separator +AND +\protected_separator +"); +\protected_separator + +\layout Standard + +would produce the query: +\layout LyX-Code + +UPDATE +\protected_separator +TABLE +\protected_separator +stock +\protected_separator +SET +\protected_separator +item +\protected_separator += +\protected_separator +'6 +\protected_separator +Dinner +\protected_separator +Roles',num +\protected_separator += +\protected_separator +75,weight +\protected_separator += +\protected_separator +0.95, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +price +\protected_separator += +\protected_separator +0.97,date +\protected_separator += +\protected_separator +'1998-05-25' +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +WHERE +\protected_separator +item +\protected_separator += +\protected_separator +'Dinner +\protected_separator +Roles' +\protected_separator +AND +\protected_separator +num +\protected_separator += +\protected_separator +75 +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +AND +\protected_separator +weight +\protected_separator += +\protected_separator +0.95 +\protected_separator +AND +\protected_separator +price +\protected_separator += +\protected_separator +0.97 +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +AND +\protected_separator +date +\protected_separator += +\protected_separator +'1998-05-25' +\protected_separator + +\layout Standard + +which will change the entree in the table so that item is now "6 Dinner + Roles" instead of "Dinner Roles" +\layout Standard + +You can use +\series bold +SQLQuery::update +\series default + (and thus +\series bold +Query::update +\series default +) as a short cut to accomplishing the same task like so: +\layout LyX-Code + +stock +\protected_separator +s2 +\protected_separator += +\protected_separator +s; +\protected_separator + +\protected_separator + +\protected_separator + +\newline +s2.item +\protected_separator += +\protected_separator +"6 +\protected_separator +Dinner +\protected_separator +Roles"; +\protected_separator + +\newline +query.update(s,s2); +\protected_separator + +\layout Standard + +Like +\series bold +SQLQuery::insert +\series default +, it will use s.table for the table name which defaults to the name of the + structure. + +\layout Standard + +You can also specify an different manipulator which will effect the way + c++ quotes or escapes the values. + This may be any valid stream manipulator that only effects the item to + the right of manipulator. + +\series bold +value_list +\series default + and +\series bold +equal_list +\series default + defaults to +\series bold +escape +\series default + and +\series bold +field_list +\series default + defaults to +\series bold +do_nothing +\series default +. + For +\series bold +equal_list +\series default + the manipulator only effects the +\series bold +value +\series default + part and not the +\series bold +field name +\series default + part. + +\layout Standard + +This can be useful creating exporting to a file where you don't want quotes + around strings for example. + +\layout LyX-Code + +table_out +\protected_separator +<< +\protected_separator +q.value_list(" +\backslash + +\protected_separator +t", +\protected_separator +mysql_escape) +\protected_separator +<< +\protected_separator +endl; +\layout Standard + +will append data to the file handle table_out. + +\layout Standard + +The three non-basic forms allow you to specify which items are returned. + For example: +\layout LyX-Code + +cout +\protected_separator +<< +\protected_separator +q.value_list(false,false,true,true,false) +\protected_separator +<< +\protected_separator +endl; +\protected_separator +//bool +\protected_separator +form +\protected_separator + +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +q.value_list(stock_weight, +\protected_separator +stock_price) +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\protected_separator + +\protected_separator +//list +\protected_separator +form +\protected_separator + +\layout Standard + +will both return: +\layout LyX-Code + +0.95,0.97 +\protected_separator + +\protected_separator + +\layout Standard + +The +\shape italic +bool form +\shape default + excepts boolean arguments where each true/false represents an wether to + show a valuable. + False means not to show it while true means to show it. + If you leave of some they are assumed to be false. + For example: +\layout LyX-Code + +cout +\protected_separator +<< +\protected_separator +q.value_list(false,false,true,true) +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\protected_separator + +\layout Standard + +is the same as the above example. + +\layout Standard + +The +\shape italic +list form +\shape default + allows you to specify which items to show. + An enum values are created for each valuable with the name of struct plus + the underscore character prefixed before it. + For example: item becomes stock_item. + +\layout Standard + +These forms can be useful is select queries. + For example: +\layout LyX-Code + +query +\protected_separator +<< +\protected_separator +"SELECT +\protected_separator +* +\protected_separator +FROM +\protected_separator +stock +\protected_separator +WHERE +\protected_separator +" +\protected_separator + +\layout LyX-Code + + +\protected_separator + +\protected_separator + +\protected_separator + << +\protected_separator +q.equal_list(" +\protected_separator +AND +\protected_separator +",stock_weight,stock_price); +\protected_separator + +\layout Standard + +would produce the query: +\layout LyX-Code + +SELECT +\protected_separator +* +\protected_separator +FROM +\protected_separator +stock +\protected_separator +WHERE +\protected_separator +weight=0.95 +\protected_separator +AND +\protected_separator +price=0.97 +\protected_separator + +\protected_separator + +\layout Standard + +which will select all rows from stock which have the same weight and price + as +\shape italic +q +\shape default +. + +\layout Standard + +The +\shape italic +vector form +\shape default + (not shown above) allows you to pass a boolean vector which is a time saver + if you use the some pattern more than once as it avoids having to create + the vector from the arguments each time. + If +\family typewriter +a +\family default + is a boolean vector then +\family typewriter +a[0] +\family default + will hold wether to include the first variable +\family typewriter +a[1] +\family default + the second etc... + For example: +\layout LyX-Code + +vector +\protected_separator +a; +\protected_separator + +\protected_separator + +\newline +a[0] +\protected_separator += +\protected_separator +false; +\protected_separator +a[1] +\protected_separator += +\protected_separator +false; +\protected_separator +a[2] +\protected_separator += +\protected_separator +true; +\protected_separator +a[3] +\protected_separator += +\protected_separator +true; +\protected_separator +a[4] +\protected_separator += +\protected_separator +false; +\protected_separator + +\newline +query +\protected_separator +<< +\protected_separator +"SELECT +\protected_separator +* +\protected_separator +FROM +\protected_separator +stock +\protected_separator +WHERE +\protected_separator +" +\protected_separator +<< +\protected_separator +q.equal_list(" +\protected_separator +AND +\protected_separator +", +\protected_separator +a); +\protected_separator + +\layout Standard + +will produce the same query as in the above example. + +\layout Section + +sql_create_c_names +\layout Standard + +You can also specify alternate field names like so: +\layout LyX-Code + +sql_create_c_names_5(stock, +\protected_separator +1, +\protected_separator +5, +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +string, +\protected_separator +item, +\protected_separator +"item", +\protected_separator +// +\protected_separator +type, +\protected_separator +id, +\protected_separator +column +\protected_separator +name +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +int, +\protected_separator +num, +\protected_separator +"quantity", +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +weight, +\protected_separator +"weight", +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +double, +\protected_separator +price, +\protected_separator +"price" +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +MysqlDate, +\protected_separator +date, +\protected_separator +"shipment") +\protected_separator + +\layout Standard + +When +\series bold +field_list +\series default + or +\series bold +equal_list +\series default + is used it will use the given field names rather than the variable names + for example: +\layout LyX-Code + +stock +\protected_separator +s("Dinner +\protected_separator +Roles",75,0.95,0.97,"1998-05-25"); +\protected_separator + +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +"Field +\protected_separator +List: +\protected_separator +" +\protected_separator +<< +\protected_separator +s.field_list() +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\newline +cout +\protected_separator +<< +\protected_separator +"Equal +\protected_separator +List: +\protected_separator +" +\protected_separator +<< +\protected_separator +s.equal_list() +\protected_separator +<< +\protected_separator +endl; +\protected_separator + +\layout Standard + +Would return something like (with a little extra hand formating): +\layout LyX-Code + +Field +\protected_separator +List: +\protected_separator +item,quantity,weight,price,shipment +\protected_separator + +\protected_separator + +\newline +Equal +\protected_separator +List: +\protected_separator +item +\protected_separator += +\protected_separator +'Dinner +\protected_separator +Roles',quantity +\protected_separator += +\protected_separator +75,weight +\protected_separator += +\protected_separator +0.95, +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +price +\protected_separator += +\protected_separator +0.97,shipment +\protected_separator += +\protected_separator +'1998-05-25' +\protected_separator + +\layout Section + +sql_create_c_names General Format +\layout Standard + +The general format is: +\layout LyX-Code + +sql_create_c_names_# +\protected_separator +(NAME, +\protected_separator +CMP, +\protected_separator +CNST, +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +NAME1, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +... +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE#, +\protected_separator +ITEM#, +\protected_separator +NAME#) +\protected_separator + +\layout Standard + +where NAME1 is the name of the first field, etc. + Everything else is the same as it is the same as in sql_create_basic_c_order + General Format. + +\layout Section + +sql_create_c_order +\layout Standard + +As in sql_create_basic_c_order you may specify a custom order. + The general from is: +\layout LyX-Code + +sql_create_c_order_# +\protected_separator +(NAME, +\protected_separator +CMP, +\protected_separator +CNST, +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +ORDER1, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +... +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE#, +\protected_separator +ITEM#, +\protected_separator +ORDER#) +\protected_separator + +\layout Standard + +where everything is the same as in sql_create_basic_c_order General Format. + +\layout Section + +sql_create_complete +\layout Standard + +You can also specify both a custom order and custom field names. + The general from is. + +\layout LyX-Code + +sql_create_complete_# +\protected_separator +(NAME, +\protected_separator +CMP, +\protected_separator +CNST, +\protected_separator + +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE1, +\protected_separator +ITEM1, +\protected_separator +NAME1, +\protected_separator +ORDER1, +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +... +\protected_separator + +\protected_separator + +\newline + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator + +\protected_separator +TYPE#, +\protected_separator +ITEM#, +\protected_separator +NAME#, +\protected_separator +ORDER#) +\protected_separator + +\layout Standard + +Where everything is the same as in sql_create_c_order General Format and + sql_create_c_names General Format. + +\layout Section + +Changing the table name +\layout Standard + +In order to avoid having even more forms I decided not to allow you to specify + a different table name in the actual macro call. + The table name is used by +\series bold +SQLQuery::insert +\series default +, +\series bold +replace +\series default +, and +\series bold +update +\series default +. + However you can easeally change the default table name, which is the same + as the struct name, by changing the reference +\series bold +NAME::table() +\series default + returns to a different +\series bold +const char * +\series default + For example: +\layout LyX-Code + +stock::table() +\protected_separator += +\protected_separator +"in_stock" +\protected_separator + +\protected_separator + +\layout Standard + +Will change the table name to "in_stock" in the examples used through out + this guide. + +\layout Section + +Seeing the actual code +\layout Standard + +To see the actual code that the macro inserts use sql++pretty. + For example: +\layout LyX-Code + +sql++pretty +\protected_separator +< +\protected_separator +test.cc +\protected_separator +| +\protected_separator +less +\protected_separator + +\protected_separator + +\layout Section + +Adding functionality +\layout Standard + +The best way to add functionality is through inheritance. + Even though you could paste the code outputted from pretty.pl and modify + it this is not recommended because it won't reflect future enhancements. + +\layout Section + +Other notes +\layout Standard + +Macros are defined for structures with up to 25 items. + If you need more modify the underlying perl script custom.pl. + This perl script is used to generate the header file. + It in no way tries to parse C++ code. + +\layout Standard + +The header file that the script custom.pl creates is close to a meg. + However, please note that the 1 meg header file (custom-macros.hh) is NOTHING + but macros. + Therefor the compiler has to do very little work when reading is. + +\layout Standard + +Also, everything included by the macro call is done in such a way that you + can safely include the macro call in a header file and not have to worry + about duplicate function calls or anything of the like. + +\layout Chapter + +Long Names +\layout Standard + +By default the Mysql++ API uses both short names with out the +\series bold + Mysql +\series default + or +\series bold +mysql_ +\series default +prefix and long names with the +\series bold +Mysql +\series default + or +\series bold +mysql_ +\series default +prefix. + If this causes name problems define the macro +\series bold +MYSQL_NO_SHORT_NAMES +\series default + before including +\series bold +mysql++ +\series default +. + This will force the use of long names only. + The short and long names are mapped as follows: +\layout Standard +\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable +multicol5 +33 2 0 0 -1 -1 -1 -1 +1 1 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +1 0 0 0 +2 1 0 "" "" +2 1 1 "" "" +1 8 1 1 0 0 0 "" "" +1 8 1 1 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 2 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" +0 8 1 0 0 0 0 "" "" + + +\series bold +Short Name +\newline +Long Name +\series default + +\newline +BadQuery +\newline +MysqlBadQuery +\newline +Connection +\newline +MysqlConnection +\newline +ResNSel +\newline +ResNSel +\newline +ResUse +\newline +ResUse MysqlResUse +\newline +Result +\newline +MysqlRes +\newline +Field +\newline +MysqlField +\newline +Fields +\newline +MysqlFields +\newline +ResIter +\newline +MysqlResIter +\newline +ResultIter +\newline +MysqlResIter +\newline +Row +\newline +MysqlRow +\newline +MutableRow +\newline +MysqlMutableRow +\newline +FieldNames +\newline +MysqlFieldNames +\newline +Query +\newline +MysqlQuery +\newline +BadConversion +\newline +MysqlBadConversion +\newline +ColData +\newline +MysqlColData +\newline +MutableColData +\newline +MysqlMutableColData +\newline +quote +\newline +mysql_quote +\newline +quote_only +\newline +mysql_quote_only +\newline +quote_double_only +\newline +mysql_quote_double_only +\newline +escape +\newline +mysql_escape +\newline +do_nothing +\newline +mysql_do_nothing +\newline +ignore +\newline +mysql_ignore +\newline +Date +\newline +MysqDate +\newline +Time +\newline +MysqlTime +\newline +DateTime +\newline +MysqlDateTime +\newline +Set +\newline +MysqlSet +\newline +Null +\newline +MysqlNull +\newline +null_type +\newline +mysql_null_type +\newline +null +\newline +mysql_null +\newline +NullisNull +\newline +MysqlNullisNull +\newline +NullisZero +\newline +MysqlNullisZero +\newline +NullisBlank +\newline +MysqlNullisBlank +\layout Part* + +Appendices +\layout LaTeX + + +\backslash +appendix +\layout Chapter + +Changelog +\layout Section* + +1.5 (Dec 1 1999) Sinisa Milivojevic +\layout Itemize + +Fixed bug in template queries, introduced in 1.4 (!) +\layout Itemize + +Fixed connect bug +\layout Itemize + +Fixed several bug in type_info classes +\layout Itemize + +Added additional robustness in classes +\layout Itemize + +Added additional methods for SQL type info +\layout Itemize + +Changed Changelog and README +\layout Section* + +1.4 (Nov 25 1999) Sinisa Milivojevic +\layout Itemize + +Fixed bug in store and storein methods +\layout Itemize + +Fixed one serious memory leak +\layout Itemize + +Fixed a very serious bug generated by gcc 2.95.xx !! +\layout Itemize + +Added robustness in classes, so that e.g. + same query and row objects can be re-used +\layout Itemize + +Changed sinisa_ex example to reflect and demonstrate this stability +\layout Itemize + +Changed Changelog and README +\layout Itemize + +Few other bug fixes and small improvements and speed-ups +\layout Section* + +1.3 (Nov 10 1999) Sinisa Milivojevic +\layout Itemize + +Fixed several erronous definitions +\layout Itemize + +Further changed source to be 2.95.2 compatible +\layout Itemize + +Expunged unused statements, especially dubious ones, like use of pointer_tracker +\layout Itemize + +Corrected bug in example file fieldinf1 +\layout Itemize + +Finally fixed mysql_init in Connection constructor, which provided much + greater stability ! +\layout Itemize + +Added read and get options, so that clients, like mysqlgui can use it +\layout Itemize + +Changed Changelog and README +\layout Itemize + +Many other bug fixes. +\layout Section* + +1.2 (Oct 15 1999) Sinisa Milivojevic +\layout Itemize + +First offical release. + Version 1.0 and 1.1 were releases by Sinisa before I (Kevin Atkinson) made + him the offical maintainer, +\layout Itemize + +Many manual fixes. +\layout Itemize + +Changed README and Changelog +\layout Itemize + +Changed source to be compilable by gcc 2.95.xx, tribute to Kevin Atkinson + +\layout Itemize + +Added methods in Connection class which are necessary for fullfilling administra +tive functions with MySQL +\layout Itemize + +Added many bug fixes in code pertaining to missing class initializers , + as notified by Michael Rendell +\layout Itemize + +Sinisa Milivojevic is now the offical maintainer. +\layout Section* + +1.1 (Aug 2 1999) Sinisa Milivojevic +\layout Itemize + +Added several bug fixes +\layout Itemize + +Fixed memory leak problems and variables overlapping problems. +\layout Itemize + +Added automake and autoconf support by loic@ceic.com +\layout Itemize + +Added Makefile for manual +\layout Itemize + +Added support for cygwin +\layout Itemize + +Added example sinisa_ex (let modesty prevail) which used to crash a lot + when memory allocation, memory leak and overlap problems were present. + Smooth running of this example proves that all those bugs are fixed +\layout Itemize + +Corrected bugs in sql_query.cc regarding delete versus delete[] and string + length in manip.cc +\layout Itemize + +Changed manual +\layout Itemize + +Changed README +\layout Itemize + +Many other smaller things +\layout Section* + +1.0 (June 9 1999) Michael Widenius +\layout Itemize + +Added patches from Orion Poplawski to support the UnixWare + 7.0 compiler +\layout Section* + +.64.1.1a (Sep 27 1998) +\layout Itemize + +Fixed several bugs that caused my library to fail to compile with egcs 1.1. + Hopefully it will still compile with egcs 1.0 however I have not been able + to test it with egcs 1.0. +\layout Itemize + +Removed some problem causing debug output in sql++pretty. +\layout Section* + +.64.1a (Aug 1 1998) +\layout Itemize + +Added an (almost) full guide to using Template Queries. +\layout Itemize + +Fixed it so the SQLQuery will throw an exception when all the template parameter +s are not provided. +\layout Itemize + +Proofread and speedchecked the manual (it really needed it). +\layout Itemize + +Other minor document fixes. +\layout Section* + +.64.0.1a (July 31 1998) +\layout Itemize + +Reworked the Class Reference section a bit. +\layout Itemize + +Minor document fixes +\layout Itemize + +Added more examples for SSQLS. +\layout Itemize + +Changed the syntax of equal_list for SSQLS from equal_list (cchar *, Manip, + cchar *) to (cchar *, cchar *, Manip). +\layout Itemize + +Added set methods to SSQLS. + These new methods do the same thing as there corresponding constructors. +\layout Itemize + +Added methods for creating a mysql_type_info from a C++ type_info. +\layout Section* + +.64.a (July 24 1998) +\layout Itemize + +Changed the names of all the classes so they no longer have to have Mysql + in the begging of it. + However if this creates a problem you can define a macro to +\emph on +only +\emph default + use the old names instead. + +\layout Itemize + +The Specialized SQL Structures (formally known as Custom Mysql Structures) + changed from mysql_ to sql_. +\layout Itemize + +Added the option of using exceptions thoughout the API. +\layout Itemize + +ColData (formally known as MysqlStrings) will now throw an exception if + there is a problem in the conversion. +\layout Itemize + +Added a null adapter. +\layout Itemize + +Added Mutable Result Sets +\layout Itemize + +Added a very basic runtime type identification for SQL types +\layout Itemize + +Changed the document format from POD to LyX . +\layout Itemize + +Am now using a modified version of Perceps to extract the class information + directly from the code to make my life easier. +\layout Itemize + +Added an option of defining a macro to avoid using the automatic conversion + with binary operators. +\layout Itemize + +Other small fixed I probully forgot to mentune. +\layout Section* + +.63.1.a +\layout Itemize + +Added Custom Mysql Structures. +\layout Itemize + +Fixed the Copy constructor of class Mysql +\layout Itemize + +Started adding code so that class Mysql lets it children now when it is + leaving +\layout Itemize + +Attempted to compile it into a library but still need help. + As default it will compile as a regular program. +\layout Itemize + +Other small fixes. +\layout Section* + +.62.a (May 3 1998) +\layout Itemize + +Added Template Queries +\layout Itemize + +Created s separate SQLQuery object that is independent of an SQL connection. +\layout Itemize + +You no longer have to import the data for the test program as the program + creates the database and tables it needs. +\layout Itemize + +Many small bug fixes. +\layout Section* + +.61.1.a (April 28 1998) +\layout Itemize + +Cleaned up the example code in test.cc and included it in the manual. +\layout Itemize + +Added an interface layout plan to the manual. +\layout Itemize + +Added a reverse iterator. +\layout Itemize + +Fixed a bug with row.hh (It wasn't being included because of a typo). +\layout Section* + +.61.0.a +\layout Itemize + +Major interface changes. + I warned you that the interface may change while it is in pre-alpha state + and I wasn't kidding. +\layout Itemize + +Created a new and Separate Query Object. + You can no longer execute queries from the Mysql object instead you have + to create a query object with Mysql::query() and use it to execute queries. +\layout Itemize + +Added the comparison operators to MysqlDate, MysqlTime and MysqlDateTime. + Fixed a few bugs in the MysqlDate... + that effected the stream output and the conversion of them to strings. +\layout Itemize + +Reflected the MysqlDate... + changes in the manual. +\layout Itemize + +Added a new MysqlSet object and a bunch of functions for working with mysql + set strings. + +\layout Section* + +.60.3a (April 24 1998) +\layout Itemize + +Changed strtoq and strtouq to strtoll and strtull for metter compatibility + Minor Manual fix. +\layout Itemize + +Changed makefile to make it more compatible with Solaris (Thanks Chris H) +\layout Itemize + +Fixed bug in comparison functions so that they would compare in he right + direction. +\layout Itemize + +Added some items to the to do list be sure to have a look. +\layout Chapter + +To Do +\layout Standard + +These are in the order I plan on implementing them. +\layout Itemize + +Improve the runtime type identification system for the sql types which will + be needed for the mutable results sets and the binary operators in particular. +\layout Itemize + +Improve the mutable results sets so that they can be assigned types that + are not strings setting the sql type aproprestly. + Also allow the SQLtype to be fixed so that when the programmer assigned + a type to the data field that is not compatible with that sql type it will + through an exception. + For example setting an string to an int. +\layout Itemize + +Change the behavior of MysqlString when used with binary operators. + Instead of converting to the type on the other side of the operator have + it convert to the type the Mysql server said it originally was. +\layout Itemize + +Improve the Null adapters to make them more intelligently. +\layout Itemize + +Be able to store the result set in an assignable container that stores the + results in the format they were originally stored in on the server. + (Not sure what the best way to go about this is. + If you have any ideas let me know.) +\layout Itemize + +Better handling of the destruction of the Mysql class. + Have it first tell all its children that its parent is getting destroys + and have then respond appropreatly. + (Partly implemented as of version .63.1.a) +\layout Itemize + +Create a container to hold Mysql enums and sets as a bit set as opposed + to a list of STL set. + +\layout Itemize + +Have a more intelligent MysqlRes that can reexecute to refresh the data. + +\layout Itemize + +Create full fledged client side cursors +\layout Standard + +If you have anything else you want to see let us know at sinisa@cytanet.com.cy + or monty@mysql.com. + +\layout Chapter + +Credits +\layout Standard + +The following is an informal list of programs and people I would like to + thank. +\layout Itemize + +egcs - for the great compiler (egcs.cygnus.com) +\layout Itemize + +Perl - for making my life in general a lot easier (www.perl.com) +\layout Itemize + +Lyx - as a great tool for helping me with this manual (www.lyx.org) +\layout Itemize + +perceps - As a great tool for extracting documentation from the source (friga.mer. +utexas.edu/mark/perl/perceps/) +\layout Itemize + +latex2html - For making the html version of this document possible (www-dsed.llnl. +gov/files/programs/unix/latex2html/) +\layout Itemize + +lynx - For manking the text version of this document possible. +\layout Itemize + +Mysql - for obvious reasons (www.tcx.se) +\layout Itemize + +Xemacs - the editor of choice +\layout Itemize + +Debian/GNU Linux - The platform I developed this on (www.debian.org) +\layout Itemize + +Chris Halverson - For helping me get it to compile under Solaris. +\layout Itemize + +Fredric Fredricson - For a long talk about automatic conversions. +\layout Itemize + +Michael Widenius - Mysql developer who has been very supportive of my efforts. +\layout Itemize + +Paul J. + Lucas -For the original idea of treating the query object like a stream. +\layout Itemize + +Scott Barron - For helping me with the shared libraries. +\layout Itemize + +Jools Enticknap - For giving me the Template Queries Idea. +\layout Itemize + +M. + S. + Sriram - For a detailed dission of how the Template Queries should be implement +ed, the suggestion to throw exceptions on bad queries, and the idea of having + a back-end independent query object (ie SQLQuery). +\layout Itemize + +Sinisa Milivojevic - For becoming the new offical maintainer. +\layout Standard + +If you fell that I forgot something please let me know. +\layout Chapter + +Copyright +\layout Standard + +The Mysql++ API is copyright 1998 by Kevin Atkinson and 1999 by MySQL and + is released under the LGPL license . +\layout Standard + +The intent of doing this is allow developers to use my library to develop + commercial programs and to allow it be distributed with commercial databases. +\layout Section + +LGPL +\layout Standard +\align center +GNU LIBRARY GENERAL PUBLIC LICENSE +\newline +Version 2, June 1991 +\layout Standard + +Copyright (C) 1991 Free Software Foundation, Inc. + +\layout Quote + +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +\layout Standard + +Everyone is permitted to copy and distribute verbatim copies of this license + document, but changing it is not allowed. +\layout Standard + +[This is the first released version of the library GPL. + It is numbered 2 because it goes with version 2 of the ordinary GPL.] +\layout Standard +\align center +Preamble +\layout Standard + +The licenses for most software are designed to take away your freedom to + share and change it. + By contrast, the GNU General Public Licenses are intended to guarantee + your freedom to share and change free software--to make sure the software + is free for all its users. +\layout Standard + +This license, the Library General Public License, applies to some specially + designated Free Software Foundation software, and to any other libraries + whose authors decide to use it. + You can use it for your libraries, too. +\layout Standard + +When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this service + if you wish), that you receive source code or can get it if you want it, + that you can change the software or use pieces of it in new free programs; + and that you know you can do these things. +\layout Standard + +To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. + These restrictions translate to certain responsibilities for you if you + distribute copies of the library, or if you modify it. +\layout Standard + +For example, if you distribute copies of the library, whether gratis or + for a fee, you must give the recipients all the rights that we gave you. + You must make sure that they, too, receive or can get the source code. + If you link a program with the library, you must provide complete object + files to the recipients so that they can relink them with the library, + after making changes to the library and recompiling it. + And you must show them these terms so they know their rights. +\layout Standard + +Our method of protecting your rights has two steps: (1) copyright the library, + and (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the library. +\layout Standard + +Also, for each distributor's protection, we want to make certain that everyone + understands that there is no warranty for this free library. + If the library is modified by someone else and passed on, we want its recipient +s to know that what they have is not the original version, so that any problems + introduced by others will not reflect on the original authors' reputations. +\layout Standard + +Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that companies distributing free software will + individually obtain patent licenses, thus in effect transforming the program + into proprietary software. + To prevent this, we have made it clear that any patent must be licensed + for everyone's free use or not licensed at all. +\layout Standard + +Most GNU software, including some libraries, is covered by the ordinary + GNU General Public License, which was designed for utility programs. + This license, the GNU Library General Public License, applies to certain + designated libraries. + This license is quite different from the ordinary one; be sure to read + it in full, and don't assume that anything in it is the same as in the + ordinary license. +\layout Standard + +The reason we have a separate public license for some libraries is that + they blur the distinction we usually make between modifying or adding to + a program and simply using it. + Linking a program with a library, without changing the library, is in some + sense simply using the library, and is analogous to running a utility program + or application program. + However, in a textual and legal sense, the linked executable is a combined + work, a derivative of the original library, and the ordinary General Public + License treats it as such. +\layout Standard + +Because of this blurred distinction, using the ordinary General Public License + for libraries did not effectively promote software sharing, because most + developers did not use the libraries. + We concluded that weaker conditions might promote sharing better. +\layout Standard + +However, unrestricted linking of non-free programs would deprive the users + of those programs of all benefit from the free status of the libraries + themselves. + This Library General Public License is intended to permit developers of + non-free programs to use free libraries, while preserving your freedom + as a user of such programs to change the free libraries that are incorporated + in them. + (We have not seen how to achieve this as regards changes in header files, + but we have achieved it as regards changes in the actual functions of the + Library.) The hope is that this will lead to faster development of free + libraries. +\layout Standard + +The precise terms and conditions for copying, distribution and modification + follow. + Pay close attention to the difference between a "work based on the library" + and a "work that uses the library". + The former contains code derived from the library, while the latter only + works together with the library. +\layout Standard + +Note that it is possible for a library to be covered by the ordinary General + Public License rather than by this special one. +\layout Standard +\align center +GNU LIBRARY GENERAL PUBLIC LICENSE +\newline +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +\layout Standard + +0. + This License Agreement applies to any software library which contains a + notice placed by the copyright holder or other authorized party saying + it may be distributed under the terms of this Library General Public License + (also called "this License"). + Each licensee is addressed as "you". +\layout Standard + +A "library" means a collection of software functions and/or data prepared + so as to be conveniently linked with application programs (which use some + of those functions and data) to form executables. +\layout Standard + +The "Library", below, refers to any such software library or work which + has been distributed under these terms. + A "work based on the Library" means either the Library or any derivative + work under copyright law: that is to say, a work containing the Library + or a portion of it, either verbatim or with modifications and/or translated + straightforwardly into another language. + (Hereinafter, translation is included without limitation in the term "modificat +ion".) +\layout Standard + +"Source code" for a work means the preferred form of the work for making + modifications to it. + For a library, complete source code means all the source code for all modules + it contains, plus any associated interface definition files, plus the scripts + used to control compilation and installation of the library. +\layout Standard + +Activities other than copying, distribution and modification are not covered + by this License; they are outside its scope. + The act of running a program using the Library is not restricted, and output + from such a program is covered only if its contents constitute a work based + on the Library (independent of the use of the Library in a tool for writing + it). + Whether that is true depends on what the Library does and what the program + that uses the Library does. + 1. + You may copy and distribute verbatim copies of the Library's complete source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to this + License and to the absence of any warranty; and distribute a copy of this + License along with the Library. +\layout Standard + +You may charge a fee for the physical act of transferring a copy, and you + may at your option offer warranty protection in exchange for a fee. +\layout Standard + +2. + You may modify your copy or copies of the Library or any portion of it, + thus forming a work based on the Library, and copy and distribute such + modifications or work under the terms of Section 1 above, provided that + you also meet all of these conditions: +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +a) The modified work must itself be a software library. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +b) You must cause the files modified to carry prominent notices stating + that you changed the files and the date of any change. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +c) You must cause the whole of the work to be licensed at no charge to all + third parties under the terms of this License. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +d) If a facility in the modified Library refers to a function or a table + of data to be supplied by an application program that uses the facility, + other than as an argument passed when the facility is invoked, then you + must make a good faith effort to ensure that, in the event an application + does not supply such function or table, the facility still operates, and + performs whatever part of its purpose remains meaningful. +\layout Standard + +(For example, a function in a library to compute square roots has a purpose + that is entirely well-defined independent of the application. + Therefore, Subsection 2d requires that any application-supplied function + or table used by this function must be optional: if the application does + not supply it, the square root function must still compute square roots.) +\layout Standard + +These requirements apply to the modified work as a whole. + If identifiable sections of that work are not derived from the Library, + and can be reasonably considered independent and separate works in themselves, + then this License, and its terms, do not apply to those sections when you + distribute them as separate works. + But when you distribute the same sections as part of a whole which is a + work based on the Library, the distribution of the whole must be on the + terms of this License, whose permissions for other licensees extend to + the entire whole, and thus to each and every part regardless of who wrote + it. +\layout Standard + +Thus, it is not the intent of this section to claim rights or contest your + rights to work written entirely by you; rather, the intent is to exercise + the right to control the distribution of derivative or collective works + based on the Library. +\layout Standard + +In addition, mere aggregation of another work not based on the Library with + the Library (or with a work based on the Library) on a volume of a storage + or distribution medium does not bring the other work under the scope of + this License. +\layout Standard + +3. + You may opt to apply the terms of the ordinary GNU General Public License + instead of this License to a given copy of the Library. + To do this, you must alter all the notices that refer to this License, + so that they refer to the ordinary GNU General Public License, version + 2, instead of to this License. + (If a newer version than version 2 of the ordinary GNU General Public License + has appeared, then you can specify that version instead if you wish.) Do + not make any other change in these notices. +\layout Standard + +Once this change is made in a given copy, it is irreversible for that copy, + so the ordinary GNU General Public License applies to all subsequent copies + and derivative works made from that copy. +\layout Standard + +This option is useful when you wish to copy part of the code of the Library + into a program that is not a library. +\layout Standard + +4. + You may copy and distribute the Library (or a portion or derivative of + it, under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you accompany it with the complete + corresponding machine-readable source code, which must be distributed under + the terms of Sections 1 and 2 above on a medium customarily used for software + interchange. +\layout Standard + +If distribution of object code is made by offering access to copy from a + designated place, then offering equivalent access to copy the source code + from the same place satisfies the requirement to distribute the source + code, even though third parties are not compelled to copy the source along + with the object code. +\layout Standard + +5. + A program that contains no derivative of any portion of the Library, but + is designed to work with the Library by being compiled or linked with it, + is called a "work that uses the Library". + Such a work, in isolation, is not a derivative work of the Library, and + therefore falls outside the scope of this License. +\layout Standard + +However, linking a "work that uses the Library" with the Library creates + an executable that is a derivative of the Library (because it contains + portions of the Library), rather than a "work that uses the library". + The executable is therefore covered by this License. + Section 6 states terms for distribution of such executables. +\layout Standard + +When a "work that uses the Library" uses material from a header file that + is part of the Library, the object code for the work may be a derivative + work of the Library even though the source code is not. + Whether this is true is especially significant if the work can be linked + without the Library, or if the work is itself a library. + The threshold for this to be true is not precisely defined by law. +\layout Standard + +If such an object file uses only numerical parameters, data structure layouts + and accessors, and small macros and small inline functions (ten lines or + less in length), then the use of the object file is unrestricted, regardless + of whether it is legally a derivative work. + (Executables containing this object code plus portions of the Library will + still fall under Section 6.) +\layout Standard + +Otherwise, if the work is a derivative of the Library, you may distribute + the object code for the work under the terms of Section 6. + Any executables containing that work also fall under Section 6, whether + or not they are linked directly with the Library itself. +\layout Standard + +6. + As an exception to the Sections above, you may also compile or link a "work + that uses the Library" with the Library to produce a work containing portions + of the Library, and distribute that work under terms of your choice, provided + that the terms permit modification of the work for the customer's own use + and reverse engineering for debugging such modifications. +\layout Standard + +You must give prominent notice with each copy of the work that the Library + is used in it and that the Library and its use are covered by this License. + You must supply a copy of this License. + If the work during execution displays copyright notices, you must include + the copyright notice for the Library among them, as well as a reference + directing the user to the copy of this License. + Also, you must do one of these things: +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +a) Accompany the work with the complete corresponding machine-readable source + code for the Library including whatever changes were used in the work (which + must be distributed under Sections 1 and 2 above); and, if the work is + an executable linked with the Library, with the complete machine-readable + "work that uses the Library", as object code and/or source code, so that + the user can modify the Library and then relink to produce a modified executabl +e containing the modified Library. + (It is understood that the user who changes the contents of definitions + files in the Library will not necessarily be able to recompile the application + to use the modified definitions.) +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +b) Accompany the work with a written offer, valid for at least three years, + to give the same user the materials specified in Subsection 6a, above, + for a charge no more than the cost of performing this distribution. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +c) If distribution of the work is made by offering access to copy from a + designated place, offer equivalent access to copy the above specified materials + from the same place. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +d) Verify that the user has already received a copy of these materials or + that you have already sent this user a copy. +\layout Standard + +For an executable, the required form of the "work that uses the Library" + must include any data and utility programs needed for reproducing the executabl +e from it. + However, as a special exception, the source code distributed need not include + anything that is normally distributed (in either source or binary form) + with the major components (compiler, kernel, and so on) of the operating + system on which the executable runs, unless that component itself accompanies + the executable. +\layout Standard + +It may happen that this requirement contradicts the license restrictions + of other proprietary libraries that do not normally accompany the operating + system. + Such a contradiction means you cannot use both them and the Library together + in an executable that you distribute. +\layout Standard + +7. + You may place library facilities that are a work based on the Library side-by-s +ide in a single library together with other library facilities not covered + by this License, and distribute such a combined library, provided that + the separate distribution of the work based on the Library and of the other + library facilities is otherwise permitted, and provided that you do these + two things: +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +a) Accompany the combined library with a copy of the same work based on + the Library, uncombined with any other library facilities. + This must be distributed under the terms of the Sections above. +\layout Standard +\pextra_type 1 \pextra_width 0.5in + +b) Give prominent notice with the combined library of the fact that part + of it is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. +\layout Standard + +8. + You may not copy, modify, sublicense, link with, or distribute the Library + except as expressly provided under this License. + Any attempt otherwise to copy, modify, sublicense, link with, or distribute + the Library is void, and will automatically terminate your rights under + this License. + However, parties who have received copies, or rights, from you under this + License will not have their licenses terminated so long as such parties + remain in full compliance. +\layout Standard + +9. + You are not required to accept this License, since you have not signed + it. + However, nothing else grants you permission to modify or distribute the + Library or its derivative works. + These actions are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Library (or any work based + on the Library), you indicate your acceptance of this License to do so, + and all its terms and conditions for copying, distributing or modifying + the Library or works based on it. +\layout Standard + +10. + Each time you redistribute the Library (or any work based on the Library), + the recipient automatically receives a license from the original licensor + to copy, distribute, link with or modify the Library subject to these terms + and conditions. + You may not impose any further restrictions on the recipients' exercise + of the rights granted herein. + You are not responsible for enforcing compliance by third parties to this + License. +\layout Standard + +11. + If, as a consequence of a court judgment or allegation of patent infringement + or for any other reason (not limited to patent issues), conditions are + imposed on you (whether by court order, agreement or otherwise) that contradict + the conditions of this License, they do not excuse you from the conditions + of this License. + If you cannot distribute so as to satisfy simultaneously your obligations + under this License and any other pertinent obligations, then as a consequence + you may not distribute the Library at all. + For example, if a patent license would not permit royalty-free redistribution + of the Library by all those who receive copies directly or indirectly through + you, then the only way you could satisfy both it and this License would + be to refrain entirely from distribution of the Library. +\layout Standard + +If any portion of this section is held invalid or unenforceable under any + particular circumstance, the balance of the section is intended to apply, + and the section as a whole is intended to apply in other circumstances. +\layout Standard + +It is not the purpose of this section to induce you to infringe any patents + or other property right claims or to contest validity of any such claims; + this section has the sole purpose of protecting the integrity of the free + software distribution system which is implemented by public license practices. + Many people have made generous contributions to the wide range of software + distributed through that system in reliance on consistent application of + that system; it is up to the author/donor to decide if he or she is willing + to distribute software through any other system and a licensee cannot impose + that choice. +\layout Standard + +This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. +\layout Standard + +12. + If the distribution and/or use of the Library is restricted in certain + countries either by patents or by copyrighted interfaces, the original + copyright holder who places the Library under this License may add an explicit + geographical distribution limitation excluding those countries, so that + distribution is permitted only in or among countries not thus excluded. + In such case, this License incorporates the limitation as if written in + the body of this License. +\layout Standard + +13. + The Free Software Foundation may publish revised and/or new versions of + the Library General Public License from time to time. + Such new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. +\layout Standard + +Each version is given a distinguishing version number. + If the Library specifies a version number of this License which applies + to it and "any later version", you have the option of following the terms + and conditions either of that version or of any later version published + by the Free Software Foundation. + If the Library does not specify a license version number, you may choose + any version ever published by the Free Software Foundation. +\layout Standard + +14. + If you wish to incorporate parts of the Library into other free programs + whose distribution conditions are incompatible with these, write to the + author to ask for permission. + For software which is copyrighted by the Free Software Foundation, write + to the Free Software Foundation; we sometimes make exceptions for this. + Our decision will be guided by the two goals of preserving the free status + of all derivatives of our free software and of promoting the sharing and + reuse of software generally. +\layout Standard +\align center +NO WARRANTY +\layout Standard + +15. + BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR + THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER + PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER + EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH + YOU. + SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. +\layout Standard + +16. + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL + ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE + THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING + ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF + THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS + OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR + THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY + OF SUCH DAMAGES. +\layout Standard +\align center +END OF TERMS AND CONDITIONS +\layout Standard +\align center +How to Apply These Terms to Your New Libraries +\layout Standard + +If you develop a new library, and you want it to be of the greatest possible + use to the public, we recommend making it free software that everyone can + redistribute and change. + You can do so by permitting redistribution under these terms (or, alternatively +, under the terms of the ordinary General Public License). +\layout Standard + +To apply these terms, attach the following notices to the library. + It is safest to attach them to the start of each source file to most effectivel +y convey the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. +\layout Quote + + +\newline +Copyright (C) +\layout Quote + +This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2 of the License, or (at + your option) any later version. +\layout Quote + +This library 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 Library General Public License for more details. +\layout Quote + +You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA +\layout Standard + +Also add information on how to contact you by electronic and paper mail. +\layout Standard + +You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the library, if necessary. + Here is a sample; alter the names: +\layout Quote + +Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' + (a library for tweaking knobs) written by James Random Hacker. +\layout Quote + +, 1 April 1990 Ty Coon, President of Vice +\layout Standard + +That's all there is to it! +\layout Chapter + +Feedback +\layout Standard + +Since October 1999, all maintenance has been transferred to Sinisa Milivojevic + (sinisa@cytanet.com.cy) and Michael Widenius (monty@mysql.com). +\layout Standard + +Send your feedback to any of these addresses, or even better to the mailing + list mysql-plusplus@lists.mysql.com. +\the_end ADDED doc/pretty.pl Index: doc/pretty.pl ================================================================== --- /dev/null +++ doc/pretty.pl @@ -0,0 +1,75 @@ +use FileHandle; +use IPC::Open2; + +if ($ARGV[0] =~ /^--command\=(.+)/) { + $command = $1; +} else { + $command = "g++ -E"; +} + +$/ = undef; +$orgcode = ; + +($macro) = $orgcode =~ /(sql_create_.+? *\(.+?\))/s; + +$out = << "---"; + +#include + +$macro + +--- + +$/ = "\n"; + +$temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMP} || $ENV{TEMP}; + +#print $out; + +open OUT, ">$temp_dir/${$}.cc"; +print OUT $out; +close OUT; + +system "$command $temp_dir/${$}.cc > $temp_dir/${$}.ii"; + +open IN, "$temp_dir/${$}.ii"; +while () { + next if /^\#/; + $code .= $_; +} +close IN; + +unlink "$temp_dir/${$}.cc","$temp_dir/${$}.ii"; + +$_ = $code; +s/\s+/ /g; +s/ *public: */public:\n/g; +s/ *private: */public:\n/g; +s/ *\; */\;\n/g; +s/ *\{ */ \{\n/g; +s/ *\} */ \}\n\n/g; +s/ *\n */\n/g; +s/\{\s+}/\{\}/g; +s/\}\s+\;/\}\;\n/g; + +$code = ""; +foreach (split /\n/) { + if (/\}/ && !/\{\}/ ) { + $indent -= 2; + $ind = ' 'x$indent; + } + $code .= "$ind$_\n" unless /\:$/; + $code .= "$_\n" if /\:$/; + if (/\{/ && !/\{\}/ ) { + $indent += 2; + $ind = ' 'x$indent; + } +} + +$orgcode =~ s/(sql_create_.+? *\(.+?\))/\n$code\n/s; + +print $orgcode; + + + + ADDED doc/sql++pretty Index: doc/sql++pretty ================================================================== --- /dev/null +++ doc/sql++pretty @@ -0,0 +1,75 @@ +use FileHandle; +use IPC::Open2; + +if ($ARGV[0] =~ /^--command\=(.+)/) { + $command = $1; +} else { + $command = "g++ -E"; +} + +$/ = undef; +$orgcode = ; + +($macro) = $orgcode =~ /(sql_create_.+? *\(.+?\))/s; + +$out = << "---"; + +#include + +$macro + +--- + +$/ = "\n"; + +$temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMP} || $ENV{TEMP}; + +#print $out; + +open OUT, ">$temp_dir/${$}.cc"; +print OUT $out; +close OUT; + +system "$command $temp_dir/${$}.cc > $temp_dir/${$}.ii"; + +open IN, "$temp_dir/${$}.ii"; +while () { + next if /^\#/; + $code .= $_; +} +close IN; + +unlink "$temp_dir/${$}.cc","$temp_dir/${$}.ii"; + +$_ = $code; +s/\s+/ /g; +s/ *public: */public:\n/g; +s/ *private: */public:\n/g; +s/ *\; */\;\n/g; +s/ *\{ */ \{\n/g; +s/ *\} */ \}\n\n/g; +s/ *\n */\n/g; +s/\{\s+}/\{\}/g; +s/\}\s+\;/\}\;\n/g; + +$code = ""; +foreach (split /\n/) { + if (/\}/ && !/\{\}/ ) { + $indent -= 2; + $ind = ' 'x$indent; + } + $code .= "$ind$_\n" unless /\:$/; + $code .= "$_\n" if /\:$/; + if (/\{/ && !/\{\}/ ) { + $indent += 2; + $ind = ' 'x$indent; + } +} + +$orgcode =~ s/(sql_create_.+? *\(.+?\))/\n$code\n/s; + +print $orgcode; + + + + DELETED doc/ssqls-pretty Index: doc/ssqls-pretty ================================================================== --- doc/ssqls-pretty +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/perl -use FileHandle; -use IPC::Open2; - -if ($ARGV[0] =~ /^--command\=(.+)/) { - $command = $1; -} else { - $command = "g++ -E"; -} - -if (-e 'lib/mysql++.h') { - $command .= " -I lib"; -} -else { - $command .= " -I /usr/include/mysql++/"; -} - -$/ = undef; -$orgcode = ; - -($macro) = $orgcode =~ /(sql_create_.+? *\(.+?\))/s; - -$out = << "---"; - -#include - -$macro - ---- - -$/ = "\n"; - -$temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMP} || $ENV{TEMP}; - -#print $out; - -open OUT, ">$temp_dir/${$}.cc"; -print OUT $out; -close OUT; - -system "$command $temp_dir/${$}.cc > $temp_dir/${$}.ii"; - -open IN, "$temp_dir/${$}.ii"; -while () { - next if /^\#/; - $code .= $_; -} -close IN; - -unlink "$temp_dir/${$}.cc","$temp_dir/${$}.ii"; - -$_ = $code; -s/\s+/ /g; -s/ *public: */public:\n/g; -s/ *private: */public:\n/g; -s/ *\; */\;\n/g; -s/ *\{ */ \{\n/g; -s/ *\} */ \}\n\n/g; -s/ *\n */\n/g; -s/\{\s+}/\{\}/g; -s/\}\s+\;/\}\;\n/g; - -$code = ""; -foreach (split /\n/) { - if (/\}/ && !/\{\}/ ) { - $indent -= 2; - $ind = ' 'x$indent; - } - $code .= "$ind$_\n" unless /\:$/; - $code .= "$_\n" if /\:$/; - if (/\{/ && !/\{\}/ ) { - $indent += 2; - $ind = ' 'x$indent; - } -} - -$orgcode =~ s/(sql_create_.+? *\(.+?\))/\n$code\n/s; - -print $orgcode; - - - - DELETED doc/userman/LICENSE Index: doc/userman/LICENSE ================================================================== --- doc/userman/LICENSE +++ /dev/null @@ -1,59 +0,0 @@ -MySQL++ User Manual License -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -I. COPYRIGHT - - The copyright to the MySQL++ User Manual is owned by its authors. - - -II. LICENSE - - The MySQL++ User Manual may be reproduced and distributed in whole - or in part, in any medium physical or electronic, provided that - this license notice is displayed in the reproduction. Commercial - redistribution is permitted and encouraged. Thirty days advance - notice via email to the authors of redistribution is appreciated, - to give the authors time to provide updated documents. - - - A. REQUIREMENTS OF MODIFIED WORKS - - All modified documents, including translations, - anthologies, and partial documents, must meet the - following requirements: - - 1. The modified version must be labeled as such. - - 2. The person making the modifications must be - identified. - - 3. Acknowledgement of the original author must be - retained. - - 4. The location of the original unmodified - document be identified. - - 5. The original authors' names may not be used - to assert or imply endorsement of the - resulting document without the original - authors' permission. - - In addition it is requested that: - - 1. The modifications (including deletions) - be noted. - - 2. The authors be notified by email of the - modification in advance of redistribution, - if an email address is provided in - the document. - - Mere aggregation of the MySQL++ User Manual with other - documents or programs on the same media shall not cause - this license to apply to those other works. - - All translations, derivative documents, or modified - documents that incorporate the MySQL++ User Manual may - not have more restrictive license terms than these, - except that you may require distributors to make the - resulting document available in source format. DELETED doc/userman/Makefile Index: doc/userman/Makefile ================================================================== --- doc/userman/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -## ------------------------ -## Things you may need to diddle for your local system -## ------------------------ - -FOPDIR=/usr/local/fop - - -## ------------------------ -## Input files -## ------------------------ - -HTML_DIR=../html/userman -BASENAME=userman -DOCFILE=$(BASENAME).dbx -PDFFILE=$(BASENAME).pdf -FOFILE=$(BASENAME).fo -COMMON_SS=common.xsl -FO_SS=fo.xsl -HTML_SS=html.xsl -EX_TXT=cgi_jpeg.txt custom1.txt custom2.txt custom3.txt custom4.txt \ - custom5.txt custom6.txt fieldinf1.txt for_each.txt load_jpeg.txt \ - resetdb.txt simple1.txt simple2.txt simple3.txt stock.txt \ - store_if.txt tquery.txt xaction.txt - - -## ------------------------ -## Major output rules -## ------------------------ - -html: $(HTML_DIR)/index.html - -pdf: $(PDFFILE) - - -## ------------------------ -## Standard Makefile targets -## ------------------------ - -# Notice that this is not the first target in the file, as is standard. -# PDF generation takes longer than HTML generation, so to keep the code- -# test-debug-rebuild cycle short, we generate only the HTML manual by -# default. You can explicitly say "make pdf" or "make all" when you're -# sure the DocBook file's contents are correct. -all: html pdf - -clean: - rm -f tags *.fo $(HTML_DIR)/*.html *.log *.out *.pdf *.txt - - -## ------------------------ -## How to make output files -## ------------------------ - -$(PDFFILE): $(DOCFILE) $(FO_SS) $(COMMON_SS) - xsltproc --xinclude $(FO_SS) $(DOCFILE) > $(FOFILE) - $(FOPDIR)/fop -q -fo $(FOFILE) $(PDFFILE) - cp $(PDFFILE) ../pdf - -$(HTML_DIR)/index.html: $(DOCFILE) $(EX_TXT) $(HTML_SS) $(COMMON_SS) - @xmllint --xinclude --postvalid --noent --noout $(DOCFILE) - xsltproc --xinclude -o $(HTML_DIR)/ $(HTML_SS) $(DOCFILE) - - -## ------------------------ -## Dependency rules -## ------------------------ - -$(EX_TXT): - @./mktxt $@ DELETED doc/userman/README Index: doc/userman/README ================================================================== --- doc/userman/README +++ /dev/null @@ -1,128 +0,0 @@ -The user manual is written in XML DocBook format, version 4.2. -It uses the official DocBook XSL stylesheets, and will build with -versions as old as 1.58.1. (Why these versions? They're what comes -with Red Hat Linux 9, the oldest system I still use.) We restrict -ourselves to Simplified DocBook 1.1 as much as practical, to make it -easier for new people to get started hacking on the manual. - -To make the HTML version of the user manual, just type 'make' in this -directory. (Or 'make html' if you want to be pedantic.) To make the -PDF version of the manual, say 'make pdf'. To make both versions, -say 'make all'. - - - -The most likely cause of build failures is not having the right -processing programs installed. The DocBook processing model looks -like this: - - DocBook --[XSLT proc.]-+-> HTML - ^ | - | +-> XSL-FO --[XSL-FO proc.]--> PDF - | - {XSL stylesheets} - -"DocBook" above is a file in DocBook XML format. In this case, -it's in userman.dbx. - -There are many alternatives for the tools in the square brackets: - - The first replaceable piece is an XSLT processor, which - translates XML into other text formats, such as HTML or other - varieties of XML. We use xsltproc from the Gnome project. - (http://xmlsoft.org/XSLT/) There are numerous alternatives, - but each supports different extensions to the standard, - so it's simplest if everyone uses the same processor for a - given document. - - We use the XSLT processor to do two transforms. One is - directly to HTML. The other is to XSL-FO, an XML-based page - layout language. We do this intermediary transform because - XSLT is not good at creating binary formats like PDF. - - The second replaceable piece in the diagram above is an - XSL-FO processor, which converts XSL-FO to a more directly - useful page layout format, like PDF. We've chosen FOP from - the Apache Project (http://xml.apache.org/fop/), because it's - the best of the free-as-in-freedom XSL-FO processors. - - FOP isn't without its faults. If you'd like to try some of - the commercial XSL-FO processors, RenderX's XEP (renderx.com) - is avalable in a free-as-in-beer version that adds watermarks - to your pages. Another popular option is Antenna House's XSL - Formatter (antennahouse.com), but there is no free offering. - The low-end commercial version of each of these is around $300. - Another relatively inexpensive option is Lunasil's Xinc - (lunasil.com), which is available in a personal-use edition - for under $100. - -The third replaceable piece above is the DocBook XSL stylesheet set. -The stylesheets are the XSLT processor's rules, controlling how -the input XML gets transformed to the output format. The standard -DocBook stylesheet set (link below) includes stylesheets for HTML -and XSL-FO output. If you don't have them on your system, the XSLT -processor will try to download them using your Internet connection -during processing. This slows processing quite a bit even if you -have a fast Internet connection, and it obviously doesn't work when -your net connection is down. - -A better option is to have a copy of the stylesheets on your system. -It's likely that there is a pre-built package for your system: - - Red Hat Linux: docbook-style-xsl RPM (same for Fedora Core) - Mac OS X: docbook-xsl Fink package (http://fink.sf.net) - Cygwin: docbook-xml?? package (?? = DocBook version) - -(Please send the name of the package for your system to the mailing -list if it isn't listed above, and I'll add it to the list.) - -If you can't find a package for your system, you can get the DocBook -stylesheets from the source: http://docbook.sourceforge.net/ They're -a bit tricky to set up correctly, so it's better to use a pre-built -package if you can. - -If you are still having problems, post the details about it to the -MySQL++ mailing list, and I'll try to help you debug the problem. -You might also find the FOP and/or DocBook mailing lists helpful. - - - - -If you're looking to hack on the manual, here are some helpful resources -for getting up to speed on DocBook: - - Mills' "Installing And Using An XML/SGML DocBook Editing Suite" article: - - http://tinyurl.com/8alb2 - - This is the best tutorial I've found. - - - Walsh and Muellner's _Simplified DocBook: The Definitive Guide_ book: - - http://www.docbook.org/tdg/simple/en/html/sdocbook.html - - This is the most accessible reference. - - - Walsh and Muellner's _DocBook: The Definitive Guide_ book, second - edition, online version: - - http://www.docbook.org/tdg/en/html/docbook.html - - This is the official DocBook referece; the "Simplified" guide is a - subset of this book. - - - DocBook FAQ: - - http://www.dpawson.co.uk/docbook/ - - Go here when you have a question that the tutorials and references - do not answer. - - - The official DocBook site: - - http://docbook.org/ - DELETED doc/userman/common.xsl Index: doc/userman/common.xsl ================================================================== --- doc/userman/common.xsl +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DELETED doc/userman/fo.xsl Index: doc/userman/fo.xsl ================================================================== --- doc/userman/fo.xsl +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - page - - - - - - - - - - - - - - - - - - - DELETED doc/userman/html.xsl Index: doc/userman/html.xsl ================================================================== --- doc/userman/html.xsl +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://dev.mysql.com/doc/mysql/en/ - - .html - - - () - - - - - - - - - - ../refman/classmysqlpp_1_1 - - .html - - - - - - - - - - - - - - - - - - - ../refman/structmysqlpp_1_1 - - .html - - - - - - - - - - - - - - - - - - - DELETED doc/userman/mktxt Index: doc/userman/mktxt ================================================================== --- doc/userman/mktxt +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# Script to convert C++ source files to a text format, with 4 spaces for -# every tab, and with the leading block comment removed. Used to -# reformat the example programs so they can be xincluded directly into -# the DocBook during XSLT processing. - -TXTFILE=$1 -SRCFILE=`echo ../../examples/$TXTFILE | sed -e s/\\\\.txt/.cpp/` -if [ ! -e $SRCFILE ] -then - SRCFILE=`echo ../../examples/$TXTFILE | sed -e s/\\\\.txt/.h/` -fi -CLINE=`grep -n '\*\*/' $SRCFILE |cut -f1 -d:` -LINE=`echo $CLINE + 2 |bc` - -#echo Converting $SRCFILE to $TXTFILE, starting at line $LINE... - -expand -t4 $SRCFILE | tail -n +$LINE > $TXTFILE - DELETED doc/userman/userman.dbx Index: doc/userman/userman.dbx ================================================================== --- doc/userman/userman.dbx +++ /dev/null @@ -1,3234 +0,0 @@ - - - -
- - MySQL++ User Manual - - - - Kevin - Atkinson - - - - Sinisa - Milivojevic - - - - Monty - Widenius - - - - Warren - Young - - - - - 1998-2001, 2005-2007 - Kevin Atkinson (original author) - MySQL AB - Educational Technology Resources - - - $Date: 2007-06-28 00:17:10 -0600 (Thu, 28 Jun 2007) $ - - - - - Introduction - - MySQL++ is a powerful C++ wrapper for MySQL's C API. - Its purpose is to make working with queries as easy as working - with STL containers. - - The latest version of MySQL++ can be found at - the official web - site. - - Support for MySQL++ can be had on the mailing - list. That page hosts the mailing list archives, and - tells you how you can subscribe. - - - - A Brief History of MySQL++ - - MySQL++ was created in 1998 by Kevin Atkinson. It - started out MySQL-specific, but there were early efforts to - try and make it database-independent, and call it SQL++. This - is where the old library name "sqlplus" came from. This is - also why the old versions prefixed some class names with - "Mysql" but not others: the others were supposed to be the - database-independent parts. - - Then in 1999, Sinisa Milivojevic unofficially - took over maintenance of the library, releasing versions - 1.0 and 1.1. (All of Kevin's releases were pre-1.0 point - releases.) Kevin gave over maintenance to Sinisa officially - with 1.2, and ceased to have any involvement with the library's - maintenance. Sinisa went on to maintain the library through - 1.7.9, released in mid-2001. Since Sinisa is an employee of - MySQL AB, it seems - to be during this time that the dream of multiple-database - compatibility died. - - With version 1.7.9, MySQL++ went into a period of stasis, - lasting over three years. During this time, Sinisa ran the - MySQL++ mailing list and supported its users, but made no - new releases. There were many patches submitted during this - period, some of which were ignored, others which were just - put on the MySQL++ web site for people to try. A lot of these - patches were mutually-incompatible, and not all of them gave - a fully-functional copy of MySQL++. - - In early August of 2004, the current maintainer (Warren - Young) got fed up with this situation and took over. He - released 1.7.10 later that month. - - - - - If You Have Questions... - - If you want to email someone to ask questions about - this library, we greatly prefer that you send mail to the - MySQL++ mailing - list. The mailing list is archived, so if you have - questions, do a search to see if the question has been asked - before. - - You may find people's individual email addresses in - various files within the MySQL++ distribution. Please do not - send mail to them unless you are sending something that is - inherently personal. Not all of the principal developers of - MySQL++ are still active in its development; those who have - dropped out have no wish to be bugged about MySQL++. Those of - us still active in MySQL++ development monitor the mailing - list, so you aren't getting any extra "coverage" by sending - messages to additional email addresses. - - - - - - Overview - - MySQL++ has developed into a very complex and powerful - library, with many different ways to accomplish the same - task. Unfortunately, this means that figuring out how to perform - a simple task can be frustrating for new users. In this section - we will provide an overview of the most important user-facing - components of the library. - - The overall process for using MySQL++ is similar to that - of most other database access APIs: - - - Open the connection - Form and execute the query - Iterate through the result - set Go to 2 - :) - - - There is, however, a lot of extra functionality along each - step of the way. - - - - The Connection Object - - A object - manages the connection to the MySQL server. You need at - least one of these objects to do anything. Because the - other MySQL++ objects your program will use often depend (at - least indirectly) on the Connection - instance, the Connection object needs - to live at least as long as all other MySQL++ objects in - your program. - - - - - The Query Object - - Most often, you create SQL queries using a object created by the - Connection object. - - Query is subclassed - from std::stringstream - which means you can write to it like any other - C++ stream to form a query. The library includes - stream - manipulators that make it easy to generate - syntactically-correct SQL. - - You can also set up with - this class. Template queries work something like C's - printf() function: you set up a fixed - query string with tags inside that indicate where to insert - the variable parts. If you have multiple queries that are - structurally similar, you simply set up one template query, - and use that in the various locations of your program. - - A third method for building queries is to use - Query with - (SSQLS). This feature presents your results as a C++ data - structure, instead of making you access the data through - MySQL++ intermediary classes. It also reduces the amount of - embedded SQL code your program needs. - - - - - Result Sets - - The field data in a result set are stored in a special - std::string-like class called ColData. - This class has conversion operators that let you - automatically convert these objects to any of the basic C - data types. Additionally, MySQL++ defines classes like , which you can initialize - from a MySQL DATETIME string. These - automatic conversions are protected against bad conversions, - and can either set a warning flag or throw an exception, - depending on how you set the library up. - - As for the result sets as a whole, MySQL++ has a number - of different ways of representing them: - - - Queries That Do Not Return Data - - Not all SQL queries return data. An example is - CREATE TABLE. For these types - of queries, there is a special result type () that simply reports the - state resulting from the query: whether the query was - successful, how many rows it impacted (if any), etc. - - - - Queries That Return Data: Dynamic Method - - The easiest way to retrieve data from MySQL - uses a object, - which includes one or more objects. Because these classes are - std::vector-like containers, you - can treat the result set as a two-dimensional array. For - example, you can get the 5th item on the 2nd row by simply - saying result.at(1).at(4). You - can also access row elements by field name, like this: - result.at(2)["price"]. - - An alternate way of accessing your query results - is through a - object. This class acts more like an STL input iterator - than a container: you walk through your result set one item - at a time, always going forward. You can't seek around in - the result set, and you can't know how many results are - in the set until you find the end. This method is more - efficient when there can be arbitrarily many results, - which could pose a memory allocation problem with the - previous technique. - - - - Queries That Return Data: Static Method - - The (SSQLS) feature - method above defines C++ structures that match the table - structures in your database schema. - - We call it the "static" method because the table - structure is fixed at compile time. Indeed, some schema - changes require that you update your SSQLS definitions - and recompile, or else the program could crash or throw - "bad conversion" exceptions when MySQL++ tries to stuff - the new data into an outdated data structure. (Not all - changes require a recompile. Adding a column to a table - is safe, for instance, as the program will ignore the - new column until you update the SSQLS definition.) - - The advantage of this method is that your program - will require very little embedded SQL code. You can - simply execute a query, and receive your results as C++ - data structures, which can be accessed just as you would - any other structure. The results can be accessed through - the Row object, or you can ask the library to dump the - results into a sequential or set-associative STL container - for you. Consider this: - - -vector<mystruct> v; -Query q = connection.query(); -q << "SELECT * FROM mytable"; -q.storein(v); -for (vector<mystruct>::iterator it = v.begin(); it != v.end(); ++it) { - cout << "Price: " << it->price << endl; -} - - Isn't that slick? - - - - - - Exceptions - - By default, the library throws whenever it encounters an error. You - can ask the library to set an error flag instead, if you - like, but the exceptions carry more information. Not only do - they include a string member telling you why the exception - was thrown, there are several exception types, so you can - distinguish between different error types within a single - try block. - - - - - - Tutorial - - This tutorial is meant to give you a jump start in using - MySQL++. While it is a very complicated and powerful library, - it's possible to make quite functional programs without tapping - but a fraction of its power. This section will introduce you to - the most useful fraction. - - This tutorial assumes you know C++ fairly well, in particular - the Standard Template Library (STL) and exceptions. - - - - Running the Examples - - All of the examples are complete running programs. If - you built the library from source, the examples should - have been built as well. If you installed it via the RPM - package, the example source code and a simplified Makefile - is in the examples subdirectory of the mysql++-devel - package's documentation directory. (This is usually - /usr/share/doc/mysql++-devel-*, but it - can vary on different Linuxes.) - - Before you get started, please read through any of - the README* files included with the MySQL++ distribution - that are relevant to your platform. We won't repeat all of - that here. - - Most of the examples require a test database, created - by resetdb. You run it like so: - - ./exrun resetdb [host [user [password [port]]]] - - exrun is a shell script that - ensures that the MySQL++ example program you give as its - first argument finds the correct shared library version. If - you run the example program directly, it will search the - system directories for the MySQL++ shared library. That - will only work correctly if you've installed the library - before running the examples. You should run the examples - before installing the library to ensure that the library - is working correctly, thus exrun. See - README.examples for more details. (We've - been using POSIX file and path names for simplicity above, but - there's a Windows version of exrun, called - exrun.bat. It works the same way.) - - As for the remaining program arguments, they are all - optional, but they must be in the order listed. If you leave - off the port number, it uses the default value, 3306. If you - leave off the password, it assumes you don't need one to - log in. If you leave off the user name, it uses the name - you used when logging on to the computer. And if you leave - off the host name, it assumes the MySQL server is running on - the local host. A typical invocation is: - - ./exrun resetdb localhost root nunyabinness - - For resetdb, the user name needs to - be for an account with permission to create databases. Once - the database is created, you can use any account that - has read and write permissions for the sample database, - mysql_cpp_data. - - You may also have to re-run resetdb - after running some of the other examples, as they change - the database. - - - - - A Simple Example - - The following example demonstrates - how to open a connection, execute a simple - query, and display the results. This is - examples/simple1.cpp: - - - - This example simply gets the entire "item" column from - the example table, and prints those values out. - - Notice that MySQL++'s objects work similarly to the STL - std::vector container. The only trick - is that you can't use subscripting notation if the argument - is ever 0, because of the way we do overloading, so it's - safer to call at() instead. - - The only thing that isn't explicit in the code above is - that we delegate command line argument parsing and connection - establishment to connect_to_db() in - the util module. This function exists - to give the examples a consistent interface, not to hide - important details. - - - - - A More Complicated Example - - The simple1 example above - was pretty trivial. Let's get a little deeper. Here is - examples/simple2.cpp: - - - - The main point of this example is that we're accessing - fields in the row objects by name, instead of index. This is - slower, but obviously clearer. We're also printing out the - entire table, not just one column. - - - - - Exceptions - - By default, MySQL++ uses exceptions to signal - errors. Most of the examples have a full set of exception - handlers. This is worthy of emulation. - - All of MySQL++'s custom exceptions derive - from a common base class, . That in turn derives from Standard C++'s - std::exception class. Since the library - can indirectly cause exceptions to come from the Standard C++ - Library, it's possible to catch all exceptions from MySQL++ - by just catching std::exception by - reference. However, it's better to have individual catch blocks - for each of the concrete exception types that you expect, and - add a handler for either Exception or - std::exception to act as a "catch-all" - for unexpected exceptions. - - Some of these exceptions are optional. When exceptions - are disabled on a MySQL++ object, it signals errors in some - other way, typically by returning an error code or setting - an error flag. Classes that support this feature derive - from . - Moreover, when such an object creates another object - that also derives from this interface, it passes on its - exception flag. Since everything flows from the object, disabling - exceptions on it at the start of the program disables all - optional exceptions. You can see this technique at work in the - simple[1-3] examples, which keeps them, - well, simple. - - Real-world code typically can't afford to lose out on the - additional information and control offered by exceptions. But - at the same time, it is still sometimes useful to disable - exceptions temporarily. To do this, put the section of - code that you want to not throw exceptions inside a block, - and create a - object at the top of that block. When created, it saves the - exception flag of the OptionalExceptions - derivative you pass to it, and then disables exceptions - on it. When the NoExceptions - object goes out of scope at the end of the block, - it restores the exceptions flag to its previous state. - See examples/resetdb.cpp to see this - technique at work. - - When one OptionalExceptions - derivative passes its exceptions flag to another such object, - it is only passing a copy. This means that the two objects' - flags operate independently. There's no way to globally - enable or disable this flag on existing objects in a single - call. If you're using the NoExceptions - feature and you're still seeing optional exceptions thrown, you - disabled exceptions on the wrong object. The exception thrower - could be unrelated to the object you disabled exceptions on, - it could be its parent, or it could be a child created before - you changed the exception throwing flag. - - Some of the exceptions MySQL++ can throw are not - optional: - - - The largest set of non-optional exceptions - are those from the Standard C++ Library. For instance, - if your code said "row[21]" - on a row containing only 5 fields, the - std::vector underlying the row - object will throw an exception. (It will, that is, - if it conforms to the standard.) You might consider - wrapping your program's main loop in a try block catching - std::exceptions, just in case you - trigger one of these exceptions. - - ColData will always throw - when you - ask it to do an improper type conversion. For example, - you'll get an exception if you try to convert "1.25" - to int, but not when you convert "1.00" - to int. In the latter case, MySQL++ - knows that it can safely throw away the fractional - part. - - If you use template queries and - don't pass enough parameters when instantiating the - template, Query will throw - a - exception. - - If you pass a bad option value to - Connection::set_option, it will - throw a BadOption - exception. - - - It's educational to modify the examples to force - exceptions. For instance, misspell a field name, use - an out-of-range index, or change a type to force a - ColData conversion error. - - - - - Quoting and Escaping - - SQL syntax often requires certain data to be - quoted. Consider this query: - - -SELECT * FROM stock WHERE item = 'Hotdog Buns' - - Because the string "Hotdog Buns" contains a space, - it must be quoted. With MySQL++, you don't have to add these - quote marks manually: - - -string s = "Hotdog Buns"; -Query q = conn.query(); -q << "SELECT * FROM stock WHERE item = " << quote_only << s; - - That code produces the same query string as in the - previous example. We used the MySQL++ quote_only - manipulator, which causes single quotes to be added - around the next item inserted into the stream. This - works for various string types, for any type of data - that can be converted to MySQL++'s ColData type, and for . (The next section introduces the SSQLS - feature.) - - Quoting is pretty simple, but SQL syntax also often - requires that certain characters be "escaped". Imagine if the - string in the previous example was "Frank's Brand Hotdog Buns" - instead. The resulting query would be: - - -SELECT * FROM stock WHERE item = 'Frank's Brand Hotdog Buns' - - That's not valid SQL syntax. The correct syntax - is: - - -SELECT * FROM stock WHERE item = 'Frank''s Brand Hotdog Buns' - - As you might expect, MySQL++ provides that feature, - too, through its escape manipulator. But here, - we want both quoting and escaping. That brings us to the most - widely useful manipulator: - - -string s = "Frank's Brand Hotdog Buns"; -Query q = conn.query(); -q << "SELECT * FROM stock WHERE item = " << quote << s; - - The quote manipulator both quotes strings, - and escapes any characters that are special in SQL. - - - - - Specialized SQL Structures - - - Retrieving data - - The next example introduces one of the most powerful - features of MySQL++: (SSQLS). This - is examples/custom1.cpp: - - - - Here is the stock.h header used by that example, - and many others: - - - - As you can see, SSQLS is very powerful. It allows - you to have a C++ structure paralleling your SQL table - structure and use it easily with STL code. - - - - Adding data - - SSQLS can also be used to add data to a table. This - is examples/custom2.cpp: - - - - That's all there is to it! - - There is one subtlety: MySQL++ automatically quotes - and escapes the data when building SQL queries using SSQLS - structures. It's efficient, too: MySQL++ is smart enough - to apply quoting and escaping only for those data types - that actually require it. - - Because this example modifies the sample database, - you may want to run resetdb after running this - program. - - - - Modifying data - - It almost as easy to modify data with SSQLS. This - is examples/custom3.cpp: - - - - When you run the example you will notice that in the - WHERE clause only the 'item' field is checked for. This - is because SSQLS also also less-than-comparable. - - Don't forget to run resetdb after running the - example. - - - - Less-than-comparable - - SSQLS structures can be sorted and - stored in STL associative containers as - demonstrated in the next example. This is - examples/custom4.cpp: - - - - For more details on the SSQLS feature, see the - chapter. - - - - - - C++ Equivalents of SQL Column Types - - In MySQL++ version 2.1, the new - sql_types.h header declares typedefs - for all MySQL column types. These typedefs all begin with - sql_ and end with a lowercase version of - the standard SQL type name. For instance, the MySQL++ typedef - corresponding to TINYINT UNSIGNED - is mysqlpp::sql_tinyint_unsigned. - You do not have to use these typedefs; you could use an - unsigned char here if you wanted to. For - that matter, you could use a plain int - in most cases; MySQL++ is quite tolerant of this sort of - thing. The typedefs exist for style reasons, for those who - want their C++ code to use the closest equivalent type for - any given SQL type. - - Most of these typedefs use standard C++ data types, but - a few are aliases for a MySQL++ specific type. For instance, - the SQL type DATETIME is mirrored in - MySQL++ by mysqlpp::DateTime. For - consistency, sql_types.h includes a - typedef alias for DateTime called - mysqlpp::sql_datetime. - - - - - Handling SQL Nulls - - There is no equivalent of SQL's null in the standard C++ - type system. - - The primary distinction is one of type: in SQL, null - is a column attribute, which affects whether that column - can hold a SQL null. Just like the const - keyword in the C++ type system, this effectively doubles the - number of SQL data types. To emulate this, MySQL++ provides - the Null template - to allow the creation of distinct "nullable" versions of - existing C++ types. So for example, if you have a TINY - INT UNSIGNED column that can have nulls, the proper - declaration for MySQL++ would be: - - -mysqlpp::Null<mysqlpp::sql_tinyint_unsigned> myfield; - - Template instantiations are first-class types in - the C++ language, on par with any other type. You can - use Null template instantiations - anywhere you'd use the plain version of that type. (You can - see a complete list of Null template - instantiations for all column types that MySQL understands - at the top of lib/type_info.cpp.) - - There's a secondary distinction between SQL null and - anything available in the standard C++ type system: SQL null - is a distinct value, equal to nothing else. We can't use - C++'s NULL for this because it is ambiguous, - being equal to 0 in integer context. MySQL++ provides the - global null object, which you can assign - to a Null template instance to make - it equal to SQL null: - - -myfield = mysqlpp::null; - - The final aspect of MySQL++'s null handling is that, - by default, it will enforce the uniqueness of the SQL null - value. If you try to convert a SQL null to a plain C++ - data type, MySQL++ will throw a exception. If you insert - a SQL null into a C++ stream, you get "(NULL)". If - you don't like this behavior, you can change it, by - passing a different value for the second parameter to - template Null. By default, this - parameter is , - meaning that we should enforce the uniqueness of the null - type. To relax this distinction, you can instantiate the - Null template with a different - behavior type: - or . Consider - this code: - - -mysqlpp::Null<unsigned char, mysqlpp::NullisZero> myfield; - -myfield = mysqlpp::null; -cout << myfield << endl; - -int x = myfield; -cout << x << endl; - - This will print "0" twice. If you had used the - default for the second Null - template parameter, the first output statement would - have printed "(NULL)", and the second would have thrown a - BadNullConversion exception. - - - - - Creating Transaction Sets - - MySQL++ v2.1 added the class, which makes it easier to use - transactions in an exception-safe manner. Normally you create - the Transaction object on the stack - before you issue the queries in your transaction set. Then, - when all the queries in the transaction set have been issued, - you call Transaction::commit(), - which commits the transaction set. If the - Transaction object goes out of scope - before you call commit(), the transaction - set is rolled back. This ensures that if some code throws an - exception after the transaction is started but before it is - committed, the transaction isn't left unresolved. - - examples/xaction.cpp illustrates - this: - - - - - - - Which Query Type to Use? - - There are three major ways to execute a query in - MySQL++: Query::execute(), - Query::store(), and - Query::use(). Which should you use, - and why? - - execute() is for queries - that do not return data per se. For - instance, CREATE INDEX. You do - get back some information from the MySQL server, which - execute() returns to its caller in a - object. In addition to - the obvious — a flag stating whether the query succeeded - or not — this object also contains things like the - number of rows that the query affected. If you only need the - success status, there's Query::exec(), - which just returns bool. - - If your query does pull data from the database, - the simplest option is store(). - This returns a object, - which contains an in-memory copy of the result set. The nice - thing about this is that Result is a - sequential container, like std::vector, - so you can iterate through it forwards and backwards, access - elements with subscript notation, etc. There are also the - storein() methods, which actually - put the result set into an STL container of your choice. The - downside of these methods is that a sufficiently large result - set will give your program memory problems. - - For these large result sets, the superior option is a - use() query. This returns a object, which is similar to - Result, but without all of the random-access features. This - is because a "use" query tells the database server to - send the results back one row at a time, to be processed - linearly. It's analogous to a C++ stream's input iterator, - as opposed to a random-access iterator that a container like - vector offers. By accepting this limitation, you can process - arbitrarily large result sets. This technique is demonstrated - in examples/simple3.cpp: - - - - This example does the same thing as - simple2, only with a "use" query instead - of a "store" query. If your program uses exceptions, you should - instead look at examples/usequery.cpp, - which does the same thing as simple3, - but with exception-awareness. - - - - - Conditional Result Row Handling - - Query::store() is fine if - you really need all the rows the query returns. It sometimes - happens that you can't express the full selection criteria - in a SQL query. Instead of storing the full result set, - then picking over it to find the rows you want to keep, - use Query::store_if(). This is - examples/store_if.cpp: - - - - I doubt anyone really needs to select rows from - a table that have a prime number in a given field. This - example is meant to be just barely more complex than SQL - can manage, to avoid obscuring the point. Point being, the - Query::store_if() call here gives - you a container full of results meeting a criterion that you - probably can't express in SQL. You will no doubt have much - more useful criteria in your own programs. - - If you need a more complex query than the one - store_if() knows how to build when - given an SSQLS examplar, there are two overloads that let - you use your own query string. One overload takes the query - string directly, and the other uses the query string built - with Query's stream interface. - - - - - Executing Code for Each Row In a Result Set - - SQL is more than just a database query language. Modern - database engines can actually do some calculations on the data - on the server side. But, this isn't always the best way to - get something done. When you need to mix code and a query, - MySQL++'s new Query::for_each() - facility might be just what you need. This is - examples/for_each.cpp: - - - - You only need to read the main() - function to get a good idea of what the program - does. The key line of code passes an SSQLS examplar and - a functor to Query::for_each(). - for_each() uses the SSQLS instance to - build a select * from TABLE - query, stock in - this case. It runs that query internally, calling - gather_stock_stats on each row. This - is a pretty contrived example; you could actually do this in - SQL, but we're trying to prevent the complexity of the code - from getting in the way of the demonstration here. - - Just as with store_if(), - described above, there are two other overloads for - for_each() that let you use your - own query string. - - - - - Getting Field Meta-Information - - The following example demonstrates how to get - information about the fields in a result set, such - as the name of the field and the SQL type. This is - examples/fieldinf1.cpp: - - - - - - - Dealing with Binary Data - - The tricky part about dealing with binary data in - MySQL++ is to ensure that you don't ever treat the data as a - C string, which is really easy to do accidentally. C strings - treat zero bytes as special end-of-string characters, but - they're not special at all in binary data. Recent releases - of MySQL++ do a better job of letting you keep data in - forms that don't have this problem, but it's still possible - to do it incorrectly. These examples demonstrate correct - techniques. - - - Loading a binary file into a BLOB column - - This example shows how to insert binary data - into a MySQL table's BLOB column with MySQL++, - and also how to get the value of the auto-increment - column from the previous insert. (This MySQL feature - is usually used to create unique IDs for rows as - they're inserted.) The program requires one command - line parameter over that required by the other examples - you've seen so far, the path to a JPEG file. This is - examples/load_jpeg.cpp: - - - - Notice that we used the escape - manipulator when building the INSERT query above. This - is because we're not using one of the MySQL++ types that - does automatic escaping and quoting. - - - - Serving images from BLOB column via CGI - - This example is also a very short one, considering - the function that it performs. It retreives data loaded - by load_jpeg and prints it out in - the form a web server can accept for a CGI call. This - is examples/cgi_jpeg.cpp: - - - - You install this in a web server's - CGI program directory (usually called - cgi-bin), then call it with a URL like - http://my.server.com/cgi-bin/cgi_jpeg?id=1. - That retrieves the JPEG with ID 1 from the table and - returns it to the web server, which will send it on to - the browser. - - - - - - - Template Queries - - Another powerful feature of MySQL++ is being able - to set up template queries. These are kind of like C's - printf() facility: you give MySQL++ a string - containing the fixed parts of the query and placeholders for - the variable parts, and you can later substitute in values into - those placeholders. - - The following program demonstrates how to use this - feature. This is examples/tquery.cpp: - - - - The line just before the call to - query.parse() sets the template, and the - parse call puts it into effect. From that point on, you can re-use - this query by calling any of several Query member functions that - accept query template parameters. In this example, we're using - Query::execute(). - - Let's dig into this feature a little deeper. - - - - Setting up Template Queries - - To set up a template query, you simply insert it into the - Query object, using numbered placeholders wherever you want - to be able to change the query. Then, you call the parse() - function to tell the Query object that the query string is - a template query, and it needs to parse it: - - -query << "select (%2:field1, %3:field2) from stock where %1:wheref = %0q:what"; -query.parse(); - - The format of the placeholder is: - - -%###(modifier)(:name)(:) - - Where '###' is a number up to three digits. It is - the order of parameters given to a object, starting from 0. - - 'modifier' can be any one of the following: - -
- - - - - - % - Print an actual "%" - - - "" - Don't quote or escape no matter what. - - - q - This will quote and escape - the item using the MySQL C API - function if it is a string or char *, - or another MySQL-specific type - that needs to be quoted. - - - Q - Quote but don't escape - based on the same rules as for 'q'. This - can save a bit of processing time if you - know the strings will never need - quoting - - - r - Always quote and escape - even if it is a number. - - - R - Always quote but - don't escape even if it is - a number. - - - - -
- - ":name" is for an optional name which aids in filling - SQLQueryParms. Name can contain any alpha-numeric characters - or the underscore. You can have a trailing colon, which will - be ignored. If you need to represent an actual colon after - the name, follow the name with two colons. The first one will - end the name and the second one won't be processed. -
- - - - Setting the Parameters at Execution Time - - To specify the parameters when you want to execute - a query simply use Query::store(const - SQLString &parm0, [..., const SQLString - &parm11]). This type of multiple overload - also exists for Query::storein(), - Query::use() and - Query::execute(). 'parm0' - corresponds to the first parameter, etc. You may specify up - to 25 parameters. For example: - - -Result res = query.store("Dinner Rolls", "item", "item", "price") - - with the template query provided above would - produce: - - -select (item, price) from stock where item = "Dinner Rolls" - - The reason we didn't put the template parameters in - numeric order... - - -select (%0:field1, %1:field2) from stock where %2:wheref = %3q:what - - ...will become apparent shortly. - - - - - Parameter Types and Function Overloads - - There are quite a few overloads for each of - Query's query execution - functions. (store(), - use(), - execute()...) It's possible to - have code that looks like it should work, but which doesn't, - because it's calling the wrong overload. For instance: - - -query.storein(my_vector, "1"); -query.storein(my_vector, 1); - - The first one works, and the second does - not. The cause is a vestigial second parameter to one - of storein()'s overloads that's - compatible with integers. Being vestigial, it's only getting - in the way right now, but we can't fix it until the next - major version of the libary, where it will be okay to break - the ABI. Until then, we're stuck with it. - - If the MySQL server keeps rejecting your template - queries, try explicitly casting the parameters to - SQLString: - - -query.storein(my_vector, SQLString(1)); - - This ensures that your code calls one of the overloads - meant to handle template query parameters. I don't recommend - doing this habitually, because it will clutter your code. For - the most part, MySQL++'s interface is set up to do the right - thing. It's just that there are still a few corner cases - that can't be fixed until the next time we can redesign the - interface. - - - - Default Parameters - - The template query mechanism allows you to set - default parameter values. You simply assign a value - for the parameter to the appropriate position in the - Query::def array. You can refer to the - parameters either by position or by name: - - -query.def[1] = "item"; -query.def["wheref"] = "item"; - - Both do the same thing. - - This mechanism works much like C++'s default function - parameter mechanism: if you set defaults for the parameters at - the end of the list, you can call one of - Query's query execution methods without - passing all of the values. If the query takes four parameters - and you've set defaults for the last three, you can execute the - query using as little as just one explicit parameter. - - Now you can see why we numbered the template query - parameters the way we did a few sections earlier. We ordered - them so that the ones less likely to change have higher - numbers, so we don't always have to pass them. We can just give - them defaults and take those defaults when applicable. This - is most useful when some parameters in a template query vary - less often than other parameters. For example: - - -query.def["field1"] = "item"; -query.def["field2"] = "price"; -Result res1 = query.store("Hamburger Buns", "item"); -Result res2 = query.store(1.25, "price"); - - This stores the result of the following queries - in res1 and res2, - respectively: - - -select (item, price) from stock where item = "Hamburger Buns" -select (item, price) from stock where price = 1.25 - - Default parameters are useful in this example because - we have two queries to issue, and parameters 2 and 3 remain - the same for both, while parameters 0 and 1 vary. - - Some have been tempted into using this mechanism as a - way to set all of the template parameters in a query: - - -query.def["what"] = "Hamburger Buns"; -query.def["wheref"] = "item"; -query.def["field1"] = "item"; -query.def["field2"] = "price"; -Result res1 = query.store(); - - This can work, but it is not designed - to. In fact, it's known to fail horribly in one - common case. You will not get sympathy if you complain on - the mailing list about it not working. If your code doesn't - actively reuse at least one of the parameters in subsequent - queries, you're abusing MySQL++, and it is likely to take - its revenge on you. - - - - - Error Handling - - If for some reason you did not specify all the parameters - when executing the query and the remaining parameters do not - have their values set via Query::def, - the query object will throw a object. If this happens, you - can get an explanation of what happened by calling - BadParamCount::what(), like so: - - -query.def["field1"] = "item"; -query.def["field2"] = "price"; -Result res = query.store(1.25); - - This would throw BadParamCount - because the wheref is not specified. - - In theory, this exception should never be thrown. If - the exception is thrown it probably a logic error in your - program. - -
- - - - Specialized SQL Structures - - The Specialized SQL Structure (SSQLS) feature lets you - easily define C++ structures that match the form of your SQL - tables. Because of the extra functionality that this feature builds - into these structures, MySQL++ can populate them automatically - when retrieving data from the database; with queries returning - many records, you can ask MySQL++ to populate an STL container of - your SSQLS records with the results. When updating the database, - MySQL++ can use SSQLS structures to match existing data, and it - can insert SSQLS structures directly into the database. - - You define an SSQLS using one of several macros. (These - are in the file custom.h, and in the file that it includes, - custom-macros.h.) There are a bunch of different macros, for - different purposes. The following sections will discuss each macro - type separately, beginning with the easiest and most generally - useful. - - - - sql_create - - This is the most basic sort of SSQLS declaration: - - -sql_create_5(stock, 1, 0, - string, item, - int, num, - double, weight, - double, price, - mysqlpp::Date, date) - - This creates a C++ structure called - stock containing five member - variables (item, num, - weight, price and - date), along with some constructors and - other member functions useful with MySQL++. - - One of the generated constructors takes a reference - to a mysqlpp::Row object, allowing you to easily populate a - vector of stocks like so: - - -vector<stock> result; -query.storein(result); - - That's all there is to it. The only requirements are - that the table structure be compatible with the SSQLS's member - variables, and that the fields are in the same order. - - The general format of this set of macros is: - - -sql_create_#(NAME, COMPCOUNT, SETCOUNT, TYPE1, ITEM1, ... TYPE#, ITEM#) - - Where # is the number of member variables, - NAME is the name of the structure you - wish to create, TYPEx is the type of - a member variable, and ITEMx is that - variable's name. - - The COMPCOUNT and - SETCOUNT arguments are described in - the next section. - - - - - SSQLS Comparison and Initialization - - sql_create_x - adds member functions and operators to each SSQLS that - allow you to compare one SSQLS instance to another. These - functions compare the first COMPCOUNT - fields in the structure. In the example above, - COMPCOUNT is 1, so only the - item field will be checked when comparing - two stock structures. - - This feature works best when your table's "key" - fields are the first ones in the table schema and you set - COMPCOUNT equal to the number of key - fields. That way, a check for equality between two SSQLS - structures in your C++ code will give the same results as a - check for equality in SQL. - - COMPCOUNT must - be at least 1. The current implementation of - sql_create_x cannot - create an SSQLS without comparison member functions. - - Because our stock structure - is less-than-comparable, you can use it in STL algorithms - and containers that require this, such as STL's associative - containers: - - -std::set<stock> result; -query.storein(result); -cout << result.lower_bound(stock("Hamburger"))->item << endl; - - This will print the first item in the result set that - begins with "Hamburger". - - The third parameter to - sql_create_x is - SETCOUNT. If this is nonzero, it adds an - initialization constructor and a set() - member function taking the given number of arguments, - for setting the first N fields of the - structure. For example, you could change the above example - like so: - - -sql_create_5(stock, 1, 2, - string, item, - int, num, - double, weight, - double, price, - mysqlpp::Date, date) - -stock foo("Hotdog", 52); - - In addition to this 2-parameter constructor, this version - of the stock SSQLS will have a similar - 2-parameter set() member function. - - The COMPCOUNT and - SETCOUNT values cannot be equal. If - they are, the macro will generate two initialization - constructors with identical parameter lists, which - is illegal in C++. Why does this happen? It's often - convenient to be able to say something like x - == stock("Hotdog"). This requires that there - be a constructor taking COMPCOUNT - arguments to create the temporary stock - instance used in the comparison. It is easy to work around - this limitation. Using our stock - example structure, if you wanted comparisons to consider all - 5 fields and also be able to initialize all 5 fields at once, - you would pass 5 for COMPCOUNT and - 0 for SETCOUNT. You would still get - a 5-parameter initialization constructor and a 5-parameter - set() function. - - - - - Retrieving a Table Subset - - It's not necessary to retrieve an entire table - row using SSQLS, as long as the fields you want are - grouped together at the start of the table schema. - examples/custom6.cpp illustrates - this: - - - - (See the simple1 example in the for another way to accomplish the same - thing.) - - This example illustrates an important point: you - could not use the 5-member stock - structure in this example. The reason is, when you assign a - Row object to an SSQLS, the function - that copies the row's data into the structure expects to - see as many fields in the row as are in the SSQLS. Your - program will crash when the code tries to access fields - beyond those that exist in the Row - object. The converse is not true, however: if you change - the SELECT statement above so that - it retrieves more than one column, the code will still - work, because the extra fields in each row will simply be - ignored. - - Realize that the second and third parameters to - sql_create_1 can't be anything other - than 1 and 0, respectively. As discussed above, the second - parameter must be at least 1, but since there is only one - field in the structure, it cannot be higher than 1. Since - the third parameter cannot be equal to the second, only 0 - works there. - - - - - Additional Features of Specialized SQL - Structures - - Up to this point, we haven't been using all of the - features in the SSQLS structures we've been generating. We - could have used the sql_create_basic_* - macros instead, which would have worked just as well for - what we've seen so far, and the generated code would have - been smaller. - - Why is it worth ignoring the "basic" variants of these - macros, then? Consider this: - - -query.insert(s); - - This does exactly what you think it does: it inserts - 's' into the database. This is possible because a standard - SSQLS has functions that the query object can call to get - the list of fields and such, which it uses to build an - insert query. query::update() and - query::replace() also rely on this - SSQLS feature. A basic SSQLS lacks these functions. - - Another feature of standard SSQLSes you might find a use - for is changing the table name used in queries. By default, - the table in the MySQL database is assumed to have the same - name as the SSQLS structure type. But if this is inconvenient, - you can globally change the table name used in queries like - this: - - -stock::table() = "MyStockData"; - - - - - Harnessing SSQLS Internals - - Continuing the discussion in the previous section, - there is a further set of methods that the non-"basic" - versions of the sql_create macros define - for each SSQLS. These methods are mostly for use within the - library, but some of them are useful enough that you might - want to harness them for your own ends. Here is some pseudocode - showing how the most useful of these methods would be defined - for the stock structure used in all - the custom*.cpp examples: - - -// Basic form -template <class Manip> -stock_value_list<Manip> value_list(cchar *d = ",", - Manip m = mysqlpp::quote) const; - -template <class Manip> -stock_field_list<Manip> field_list(cchar *d = ",", - Manip m = mysqlpp::do_nothing) const; - -template <class Manip> -stock_equal_list<Manip> equal_list(cchar *d = ",", - cchar *e = " = ", Manip m = mysqlpp::quote) const; - - -// Boolean argument form -template <class Manip> -stock_cus_value_list<Manip> value_list([cchar *d, [Manip m,] ] - bool i1, bool i2 = false, ... , bool i5 = false) const; - -// List form -template <class Manip> -stock_cus_value_list<Manip> value_list([cchar *d, [Manip m,] ] - stock_enum i1, stock_enum i2 = stock_NULL, ..., - stock_enum i5 = stock_NULL) const; - -// Vector form -template <class Manip> -stock_cus_value_list<Manip> value_list([cchar *d, [Manip m,] ] - vector<bool> *i) const; - -...Plus the obvious equivalents for field_list() and equal_list() - - Rather than try to learn what all of these methods do at - once, let's ease into the subject. Consider this code: - - -stock s("Dinner Rolls", 75, 0.95, 0.97, "1998-05-25"); -cout << "Value list: " << s.value_list() << endl; -cout << "Field list: " << s.field_list() << endl; -cout << "Equal list: " << s.equal_list() << endl; - - That would produce something like: - - -Value list: 'Dinner Rolls',75,0.95,0.97,'1998-05-25' -Field list: item,num,weight,price,date -Equal list: item = 'Dinner Rolls',num = 75,weight = 0.95, price = 0.97,date = '1998-05-25' - - That is, a "value list" is a list of data member values - within a particular SSQLS instance, a "field list" is a list - of the fields (columns) within that SSQLS, and an "equal list" - is a list in the form of an SQL equals clause. - - Just knowing that much, it shouldn't surprise you - to learn that Query::insert() is - implemented more or less like this: - - -*this << "INSERT INTO " << v.table() << " (" << v.field_list() << - ") VALUES (" << v.value_list() << ")"; - - where 'v' is the SSQLS you're asking the Query object - to insert into the database. - - Now let's look at a complete example, - which uses one of the more complicated forms of - equal_list(). This example - builds a query with fewer hard-coded strings than - the most obvious technique requires, which makes - it more robust in the face of change. Here is - examples/custom5.cpp: - - - - This example uses the list form of - equal_list(). The - arguments stock_weight - and stock_price are enum - values equal to the position of these columns - within the stock table. - sql_create_x generates - this enum for you automatically. - - The boolean argument form of that - equal_list() call would look like - this: - - -query << "select * from stock where " << - res[0].equal_list(" and ", false, false, true, true, false); - - It's a little more verbose, as you can see. And if you - want to get really complicated, use the vector form: - - -vector<bool> v(5, false); -v[stock_weight] = true; -v[stock_price] = true; -query << "select * from stock where " << - res[0].equal_list(" and ", v); - - This form makes the most sense if you are building many - other queries, and so can re-use that vector object. - - Many of these methods accept manipulators and custom - delimiters. The defaults are suitable for building SQL queries, - but if you're using these methods in a different context, - you may need to override these defaults. For instance, you - could use these methods to dump data to a text file using - different delimiters and quoting rules than SQL. - - At this point, we've seen all the major aspects of the - SSQLS feature. The final sections of this chapter look at - some of the peripheral aspects. - - - - - Alternate Creation Methods - - If for some reason you want your SSQLS data members - to have different names than used in the MySQL database, - you can do so like this: - - -sql_create_c_names_5(stock, 1, 5, - string, item, "item", - int, num, "quantity", - double, weight, "weight", - double, price, "price" - mysqlpp::Date, date, "shipment") - - If you want your SSQLS to have its data members in a - different order from those in the MySQL table, you can do it - like this: - - -sql_create_c_order_5(stock, 2, 5, - mysqlpp::Date, date, 5, - double, price, 4, - string, item, 1, - int, num, 2, - double, weight, 3) - - You can combine the custom names and custom ordering - like this: - - -sql_create_complete_5(stock, 2, 5, - mysqlpp::date, date, "shipment", 5, - double, price, "price", 4, - string, item, "item", 1, - int, num, "quantity", 2, - double, weight, "weight", 3) - - All three of these macro types have "basic" variants - that work the same way. Again, basic SSQLSes lack the features - necessary for automatic insert, update and replace query - creation. - - - - - Expanding SSQLS Macros - - If you ever need to see the code that a given - SSQLS declaration expands out to, use the utility - doc/ssqls-pretty, like so: - - -doc/ssqls-pretty < myprog.cpp |less - - This Perl script locates the first SSQLS declaration - in that file, then uses the C++ preprocessor to expand that - macro. (The script assumes that your system's preprocessor - is called cpp, and that its command line - interface follows Unix conventions.) - - If you run it from the top MySQL++ directory, as shown - above, it will use the header files in the distribution's - lib subdirectory. Otherwise, it - assumes the MySQL++ headers are in their default location, - /usr/include/mysql++. If you want to - use headers in some other location, you'll need to change - the directory name in -I flag at the top - of the script. - - - - - Extending the SSQLS Mechanism - - The SSQLS headers — custom.h and custom-macros.h - — are automatically generated by the Perl script - custom.pl. Although it is possible to - change this script to get additional functionality, it's - usually better to do that through inheritance. - - A regular user may find it helpful to change the the - limit on the maximum number of SSQLS data members allowed. - It's 25 out of the box. A smaller value may speed up - compile time, or you may require a higher value because - you have more complex tables than that. Simply change the - max_data_members variable at the top of - custom.pl and say make. - The limit for Visual C++ is 31, according to one report. There - doesn't seem to be a practical limit with GCC 3.3 at least: - I set the limit to 100 and the only thing that happened - is that custom-macros.h went from 1.3 MB to 18 MB and the - build time for examples/custom.* got a - lot longer. - - - - SSQLS and BLOB Columns - - It takes special care to use SSQLS with BLOB - columns. It's safest to declare the SSQLS field as of - type mysqlpp::sql_blob. This - is currently a typedef alias for ColData, which is the form the - data is in just before the SSQLS mechanism populates the - structure. Thus, when the data is copied from the internal - MySQL++ data structures into your SSQLS, you get a direct - copy of the ColData object's contents, - without interference. - - Because ColData derives - from std::string and C++ - strings handle binary data just fine, you might think - you can use std::string instead - of sql_blob, but the current - design of ColData converts to - std::string via a C string. As a - result, the BLOB data is truncated at the first embedded - null character during population of the SSQLS. There's - no way to fix that without completely redesigning either - ColData or the SSQLS mechanism. - - The sql_blob typedef may be - changed to alias a different type in the future, so using it - instead of ColData ensures that your - code tracks these library changes automatically. Besides, - ColData is only intended to be an - internal mechanism within MySQL++. The only reason the layering - is so thin here is because it's the only way to prevent BLOB - data from being corrupted while staying within the current - library interface design. - - You can see this technique in action in the - cgi_jpeg example: - - - - - - - - Using Unicode with MySQL++ - - - A Short History of Unicode - ...with a focus on relevance to MySQL++ - - In the old days, computer operating systems only - dealt with 8-bit character sets. That only allows for 256 - possible characters, but the modern Western languages have - more characters combined than that alone. Add in all the - other languages of the world plus the various symbols people - use in writing, and you have a real mess! - - Since no standards body held sway over things like - international character encoding in the early days of - computing, many different character sets were invented. These - character sets weren't even standardized between operating - systems, so heaven help you if you needed to move localized - Greek text on a DOS box to a Russian Macintosh! The only - way we got any international communication done at all was - to build standards on top of the common 7-bit ASCII subset. - Either people used approximations like a plain "c" instead - of the French "ç", or they invented things like - HTML entities ("&ccedil;" in this case) to encode these - additional characters using only 7-bit ASCII. - - Unicode solves this problem. It encodes every character - used for writing in the world, using up to 4 bytes per - character. The subset covering the most economically valuable - cases takes two bytes per character, so most Unicode-aware - programs deal in 2-byte characters, for efficiency. - - Unfortunately, Unicode was invented about two decades - too late for Unix and C. Those decades of legacy created an - immense inertia preventing a widespread move away from 8-bit - characters. MySQL and C++ come out of these older traditions, - and so they share the same practical limitations. MySQL++ - doesn't have a reason to do anything more than just pass - data along unchanged, so you still need to be aware of these - underlying issues. - - During the development of the Plan - 9 operating system (a kind - of successor to Unix) Ken Thompson invented - the UTF-8 - encoding. UTF-8 is a superset of 7-bit ASCII and - is compatible with C strings, since it doesn't use 0 bytes - anywhere as multi-byte Unicode encodings do. As a result, - many programs that deal in text will cope with UTF-8 data - even though they have no explicit support for UTF-8. (Follow - the last link above to see how the design of UTF-8 allows - this.) Thus, when explicit support for Unicode was added in - MySQL v4.1, they chose to make UTF-8 the native encoding, - to preserve backward compatibility with programs that had no - Unicode support. - - - - - Unicode on Unixy Systems - - Linux and Unix have system-wide UTF-8 support these - days. If your operating system is of 2001 or newer vintage, - it probably has such support. - - On such a system, the terminal I/O code understands - UTF-8 encoded data, so your program doesn't require any - special code to correctly display a UTF-8 string. If you - aren't sure whether your system supports UTF-8 natively, - just run the simple1 example: if the - first item has two high-ASCII characters in place of the - "ü" in "Nürnberger Brats", you know it's not - handling UTF-8. - - If your Unix doesn't support UTF-8 natively, it likely - doesn't support any form of Unicode at all, for the historical - reasons I gave above. Therefore, you will have to convert the - UTF-8 data to the local 8-bit character set. The standard Unix - function iconv() can help here. If your - system doesn't have the iconv() facility, - there is a - free implementation available from the GNU - Project. Another library you might check out is IBM's ICU. This is - rather heavy-weight, so if you just need basic conversions, - iconv() should suffice. - - - - - Unicode on Windows - - Each Windows API function that takes a string actually - comes in two versions. One version supports only 1-byte "ANSI" - characters (a superset of ASCII), so they end in 'A'. Windows - also supports the 2-byte subset of Unicode called UCS-2. - Some call these "wide" characters, - so the other set of functions end in 'W'. The MessageBox() - API, for instance, is actually a macro, not a real function. If - you define the UNICODE macro when building - your program, the MessageBox() macro - evaluates to MessageBoxW(); otherwise, - to MessageBoxA(). - - Since MySQL uses the UTF-8 Unicode encoding and Windows - uses UCS-2, you must convert data when passing text between - MySQL++ and the Windows API. Since there's no point in trying - for portability — no other OS I'm aware of uses UCS-2 - — you might as well use platform-specific functions - to do this translation. Since version 2.2.2, MySQL++ ships - with two Visual C++ specific examples showing how to do this - in a GUI program. (In earlier versions of MySQL++, we did - Unicode conversion in the console mode programs, but this - was unrealistic.) - - How you handle Unicode data depends on whether you're - using the native Windows API, or the newer .NET API. First, - the native case: - - -// Convert a C string in UTF-8 format to UCS-2 format. -void ToUCS2(LPTSTR pcOut, int nOutLen, const char* kpcIn) -{ - MultiByteToWideChar(CP_UTF8, 0, kpcIn, -1, pcOut, nOutLen); -} - -// Convert a UCS-2 string to C string in UTF-8 format. -void ToUTF8(char* pcOut, int nOutLen, LPCWSTR kpcIn) -{ - WideCharToMultiByte(CP_UTF8, 0, kpcIn, -1, pcOut, nOutLen, 0, 0); -} - - These functions leave out some important error checking, - so see examples/vstudio/mfc/mfc_dlg.cpp - for the complete version. - - If you're building a .NET application (such as, perhaps, - because you're using Windows Forms), it's better to use the - .NET libraries for this: - - -// Convert a C string in UTF-8 format to a .NET String in UCS-2 format. -String^ ToUCS2(const char* utf8) -{ - return gcnew String(utf8, 0, strlen(utf8), System::Text::Encoding::UTF8); -} - -// Convert a .NET String in UCS-2 format to a C string in UTF-8 format. -System::Void ToUTF8(char* pcOut, int nOutLen, String^ sIn) -{ - array<Byte>^ bytes = System::Text::Encoding::UTF8->GetBytes(sIn); - nOutLen = Math::Min(nOutLen - 1, bytes->Length); - System::Runtime::InteropServices::Marshal::Copy(bytes, 0, - IntPtr(pcOut), nOutLen); - pcOut[nOutLen] = '\0'; -} - - Unlike the native API versions, these examples are - complete, since the .NET platform handles a lot of things - behind the scenes for us. We don't need any error-checking - code for such simple routines. - - All of this assumes you're using Windows NT or one of - its direct descendants: Windows 2000, Windows XP, Windows - Vista, or any "Server" variant of Windows. Windows 95 and its - descendants (98, ME, and CE) do not support UCS-2. They still - have the 'W' APIs for compatibility, but they just smash the - data down to 8-bit and call the 'A' version for you. - - - - - For More Information - The Unicode - FAQs page has copious information on - this complex topic. - - When it comes to Unix - and UTF-8 specific items, the UTF-8 - and Unicode FAQ for Unix/Linux is a - quicker way to find basic information. - - - - - - Important Underlying C API Limitations - - Since MySQL++ is built on top of the MySQL C API - (libmysqlclient), it shares all of its limitations. The - following points out some of these limitations that frequently - bite newbies. Some of these may be papered over at the MySQL++ - layer in future releases, but it's best to write your program as - if they were permanent fixtures of the universe. - - - - Only one active query per - connection. This one bites MySQL++ newbies most - often in multithreaded programs. If the program has only - one Connection object and each thread gets their Query - objects from it, it's inevitable that one of those query - objects will try to execute while another query is already - running on that single connection. The safest course is - to have a separate Connection object per thread, and for - your code to get Query objects in a thread only from that - thread's Connection object. Alternately, you can confine - MySQL database access to a single thread. - - - - You must consume all rows from a query - before you can start a new query. This one - bites MySQL++ newbies most often when they try code - like this: - - -Connection c(...); -Query q = c.query(); -Result r1 = q.use("select garbage from plink where foobie='tamagotchi'"); -Result r2 = q.use("select blah from bonk where bletch='smurf'"); - - This will fail because a "use" query consumes rows - only on demand, so the MySQL server is still keeping - information around about the first query when the second - one comes in on the connection. When you try the second - query, MySQL++ will throw an exception containing an - obscure MySQL C API error message about "commands out - of sync". - - This is not the only situation where this can happen, - but all of these issues boil down to the fact that MySQL - requires that certain operations complete before you can - start a new one. - - - - The Result object - must outlive the use of any Row - objects it returns. This is because the - Row objects refer back to the - Result object that created them for - certain data. (Field names, for example.) MySQL does this - for efficiency, because there is some information about a - row that is the same for all rows in a result set. We could - avoid this in MySQL++ by making redundant copies of this - data for each row, but that would be quite wasteful. - - Beware of some of the more obscure ways this can - happen. For example: - - -Connection c(...); -Query q = c.query(); -Result res = q.store("..."); -Row row = res.at(0); -res = q.store("..."); - - At this point, the row variable's - contents are likely no longer usable. The program may run, - but the row object will use data (field names, etc.) from - the second query, not the first. - - - - - - - Incompatible Library Changes - - This chapter documents those library changes since the - epochal 1.7.9 release that break end-user programs. You can dig - this stuff out of the ChangeLog, but the ChangeLog focuses more - on explaining and justifying the facets of each change, while - this section focuses on how to migrate your code between these - library versions. - - Since pure additions do not break programs, those changes - are still documented only in the ChangeLog. - - - - API Changes - - This section documents files, functions, methods and - classes that were removed or changed in an incompatible - way. If your program uses the changed item, you will have to - change something in your program to get it to compile after - upgrading to each of these versions. - - - v1.7.10 - - Removed Row::operator[]() - overloads except the one for size_type, - and added Row::lookup_by_name() - to provide the "subscript by string" functionality. - In practical terms, this change means that the - row["field"] syntax no longer works; you - must use the new lookup_by_name - method instead. - - Renamed the generated library on POSIX - systems from libsqlplus to - libmysqlpp. - - - - - v1.7.19 - - Removed - SQLQuery::operator=(), and the - same for its Query subclass. Use - the copy constructor instead, if you need to copy one - query to another query object. - - - - - v1.7.20 - - The library used to have two names for many core - classes: a short one, such as Row - and a longer one, MysqlRow. The - library now uses the shorter names exclusively. - - All symbols within MySQL++ are in the - mysqlpp namespace now if you - use the new mysql++.h header. If - you use the older sqlplus.hh or - mysql++.hh headers, these symbols - are hoist up into the global namespace. The older headers - cause the compiler to emit warnings if you use them, - and they will go away someday. - - - - - v2.0.0 - - - Connection class changes - - - Connection::create_db() - and drop_db() return - true on success. They - returned false in - v1.7.x! This change will - only affect your code if you have exceptions - disabled. - - Renamed - Connection::real_connect() - to connect(), made several - more of its parameters default, and removed the - old connect() method, as - it's now a strict subset of the new one. The only - practical consequence is that if your program was - using real_connect(), - you will have to change it to - connect(). - - Replaced - Connection::read_option() - with new set_option() - mechanism. In addition to changing the name, - programs using this function will have to use - the new Connection::Option - enumerated values, accept a true - return value as meaning success instead of 0, - and use the proper argument type. Regarding the - latter, read_option() - took a const char* argument, but - because it was just a thin wrapper over the - MySQL C API function , the actual value being pointed - to could be any of several types. This new - mechanism is properly type-safe. - - - - - - Exception-related changes - - - Classes - Connection, - Query, - Result, - ResUse, and - Row now derive from - which gives these classes a common interface - for disabling exceptions. In addition, almost - all of the per-method exception-disabling - flags were removed. The preferred method - for disabling exceptions on these objects - is to create an instance of the new class - on the stack, which disables exceptions on an - OptionalExceptions subclass - as long as the NoExceptions - instance is in scope. You can instead call - disable_exceptions() - on any of these objects, but if you only want - them disabled temporarily, it's easy to forget - to re-enable them later. - - In the previous version of - MySQL++, those classes that supported optional - exceptions that could create instances of other - such classes were supposed to pass this flag - on to their children. That is, if you created - a Connection object - with exceptions enabled, and then asked it to - create a Query object, - the Query object also had - exceptions disabled. The problem is, this didn't - happen in all cases where it should have in v1.7. - This bug is fixed in v2.0. If your program begins - crashing due to uncaught exceptions after upgrading - to v2.0, this is the most likely cause. The most - expeditious fix in this situation is to use the - new NoExceptions feature to - return these code paths to the v1.7 behavior. A - better fix is to rework your program to avoid or - deal with the new exceptions. - - All custom MySQL++ exceptions - now derive from the new interface. The practical - upshot of this is that the variability - between the various exception types has been - eliminated. For instance, to get the error - string, the BadQuery - exception had a string member called - error plus a method called - what(). Both did the same - thing, and the what() - method is more common, so the error string was - dropped from the interface. None of the example - programs had to be changed to work with the new - exceptions, so if your program handles MySQL++ - exceptions the same way they do, your program - won't need to change, either. - - Renamed - SQLQueryNEParams exception - to BadParamCount to match - style of other exception names. - - Added - , - , - , - , - , - , and - - exception types, to fix overuse of - BadQuery. Now the latter - is used only for errors on query execution. If - your program has a "catch-all" block taking - a std::exception for - each try block containing MySQL++ statements, - you probably won't need to change your - program. Otherwise, the new exceptions will - likely show up as program crashes due to unhandled - exceptions. - - - - - - Query class changes - - - In previous versions, - Connection - had a querying interface similar to class - Query's. These methods were - intended only for Query's - use; no example ever used this interface directly, - so no end-user code is likely to be affected by - this change. - - A more likely problem - arising from the above change is code that - tests for query success by calling the - Connection object's - success() method or by - casting it to bool. This will now - give misleading results, because queries no longer - go through the Connection - object. Class Query has - the same success-testing interface, so use it - instead. - - Query - now derives from - std::ostream instead of - std::stringstream. - - - - - - Result/ResUse class changes - - - Renamed - ResUse::mysql_result() - to raw_result() so it's - database server neutral. - - Removed - ResUse::eof(), - as it wrapped the deprecated and - unnecessary MySQL C API function . See - the simple3 and - usequery examples to see - the proper way to test for the end of a result - set. - - - - - - Row class changes - - - Removed "field name" form of - Row::field_list(). - It was pointless. - - Row - subscripting works more - like v1.7.9: one can subscript a - Row with a string (e.g. - row["myfield"]), or with - an integer (e.g. row[5]). - lookup_by_name() was - removed. Because row[0] - is ambiguous (0 could mean the first field, or be - a null pointer to const char*), there - is now Row::at(), which - can look up any field by index. - - - - - - Miscellaneous changes - - - Where possible, all distributed - Makefiles only build dynamic libraries. (Shared - objects on most Unices, DLLs on Windows, - etc.) Unless your program is licensed under - the GPL or LGPL, you shouldn't have been using - the static libraries from previous versions - anyway. - - Removed the backwards-compatibility - headers sqlplus.hh and - mysql++.hh. If you were - still using these, you will have to change - to mysql++.h, which - will put all symbols in namespace - mysqlpp. - - Can no longer use arrow operator - (->) on the iterators - into the Fields, - Result - and Row - containers. - - - - - - v2.2.0 - - Code like this will have to change: - - -Query q = con.query(); -q << "delete from mytable where myfield=%0:myvalue"; -q.parse(); -q.def["myvalue"] = some_value; -q.execute(); - - ...to something more like this: - - -Query q = con.query(); -q << "delete from mytable where myfield=%0"; -q.parse(); -q.execute(some_value); - - The first code snippet abuses the default template - query parameter mechanism (Query::def) - to fill out the template instead of using one of the - overloaded forms of execute(), - store() or - use() taking one or more - SQLString parameters. The purpose - of Query::def is to allow for default - template parameters over multiple queries. In the first - snippet above, there is only one parameter, so in order - to justify the use of template queries in the first - place, it must be changing with each query. Therefore, - it isn't really a "default" parameter at all. We did not - make this change maliciously, but you can understand why - we are not in any hurry to restore this "feature". - - (Incidentally, this change was made to allow better - support for BLOB columns.) - - - - - v2.3.0 - - Connection::set_option() - calls now set the connection option immediately, instead - of waiting until just before the connnection is actually - established. Code that relied on the old behavior could see - unhandled exceptions, since option setting errors are now - thrown from a different part of the code. You want to wrap - the actual set_option() call now, - not Connection::connect() - - FieldNames and - FieldTypes are no longer exported - from the library. If you are using these classes directly - from Visual C++ or MinGW, your code won't be able to - dynamically link to a DLL version of the library any - more. These are internal classes, however, so no one - should be using them directly. - - - - - - ABI Changes - - This section documents those library changes that require - you to rebuild your program so that it will link with the - new library. Most of the items in the previous section are - also ABI changes, but this section is only for those items - that shouldn't require any code changes in your program. - - If you were going to rebuild your program after - installing the new library anyway, you can probably ignore - this section. - - - - v1.7.18 - - The Query classes now subclass - from stringstream instead of the - deprecated strstream. - - - - - v1.7.19 - - Fixed several const-incorrectnesses - in the Query classes. - - - - - v1.7.22 - - Removed "reset query" parameters from several - Query class members. This is not - an API change, because the parameters were given default - values, and the library would ignore any value other than - the default. So, any program that tried to make them take - another value wouldn't have worked anyway. - - - - - v1.7.24 - - Some freestanding functions didn't get moved into - namespace mysqlpp when that namespace was - created. This release fixed that. It doesn't affect the - API if your program's C++ source files say using - namespace mysqlpp within them. - - - - - v2.0.0 - - Removed Connection::infoo(). - (I'd call this an API change if I thought there were any - programs out there actually using this...) - - Collapsed the Connection - constructor taking a bool (for setting the throw_exceptions - flag) and the default constructor into a single constructor - using a default for the parameter. - - Classes Connection and - Query are now derived from the - Lockable interface, instead of - implementing their own lock/unlock functions. - - In several instances, functions that took - objects by value now take them by const reference, - for efficiency. - - Merged SQLQuery class's - members into class Query. - - Merged RowTemplate class's - members into class Row. - - Reordered member variable declarations in some - classes. The most common instance is when the private - section was declared before the public section; it is now - the opposite way. This can change the object's layout - in memory, so a program linking to the library must be - rebuilt. - - Simplified the date and time class hierarchy. - used to - derive from mysql_date, - used to derive - from mysql_time, and used to derive from - both of those. All three of these classes used to derive - from mysql_dt_base. All of the - mysql_* classes' functionality and - data has been folded into the leaf classes, and now the - only thing shared between them is their dependence on the - template. Since - the leaf classes' interface has not changed and end-user - code shouldn't have been using the other classes, this - shouldn't affect the API in any practical way. - - mysql_type_info now always - initializes its private num member. - Previously, this would go uninitialized if you used - the default constructor. Now there is no default - ctor, but the ctor taking one argument (which sets - num) has a default. - - - - - - - Licensing - - The primary copyright holders on the MySQL++ library and - its documentation are Kevin Atkinson (1998), MySQL AB (1999 - through 2001) and Educational Technology Resources, Inc. (2004 - through the date of this writing). There are other contributors, - who also retain copyrights on their additions; see the ChangeLog - file in the MySQL++ distribution tarball for details. - - The MySQL++ library and its Reference Manual are released - under the GNU Lesser General Public License (LGPL), reproduced - below. - - The MySQL++ User Manual — excepting some example - code from the library reproduced within it — is offered - under a license closely based on the Linux Documentation Project - License (LDPL) v2.0, included below. (The MySQL++ documentation - isn't actually part of the Linux Documentation Project, so - the main changes are to LDP-related language. Also, generic - language such as "author's (or authors')" has been replaced - with specific language, because the license applies to only - this one document.) - - These licenses basically state that you are free to use, - distribute and modify these works, whether for personal or - commercial purposes, as long as you grant the same rights to - those you distribute the works to, whether you changed them or - not. See the licenses below for full details. - - - - - GNU Lesser General Public License - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is - permitted to copy and distribute verbatim copies of this license - document, but changing it is not allowed. - - [This is the first released version of the Lesser GPL. - It also counts as the successor of the GNU Library Public License, - version 2, hence the version number 2.1.] - - - Preamble - - The licenses for most software are designed to take - away your freedom to share and change it. By contrast, the - GNU General Public Licenses are intended to guarantee your - freedom to share and change free software--to make sure the - software is free for all its users. - - This license, the Lesser General Public License, applies - to some specially designated software packages--typically - libraries--of the Free Software Foundation and other authors - who decide to use it. You can use it too, but we suggest - you first think carefully about whether this license or the - ordinary General Public License is the better strategy to use - in any particular case, based on the explanations below. - - When we speak of free software, we are referring to - freedom of use, not price. Our General Public Licenses are - designed to make sure that you have the freedom to distribute - copies of free software (and charge for this service if you - wish); that you receive source code or can get it if you want - it; that you can change the software and use pieces of it in - new free programs; and that you are informed that you can do - these things. - - To protect your rights, we need to make restrictions - that forbid distributors to deny you these rights or to ask - you to surrender these rights. These restrictions translate - to certain responsibilities for you if you distribute copies - of the library or if you modify it. - - For example, if you distribute copies of the library, - whether gratis or for a fee, you must give the recipients all - the rights that we gave you. You must make sure that they, - too, receive or can get the source code. If you link other - code with the library, you must provide complete object - files to the recipients, so that they can relink them - with the library after making changes to the library and - recompiling it. And you must show them these terms so they - know their rights. - - We protect your rights with a two-step method: (1) - we copyright the library, and (2) we offer you this license, - which gives you legal permission to copy, distribute and/or - modify the library. - - To protect each distributor, we want to make it very - clear that there is no warranty for the free library. Also, - if the library is modified by someone else and passed on, the - recipients should know that what they have is not the original - version, so that the original author's reputation will not be - affected by problems that might be introduced by others. - - Finally, software patents pose a constant threat to the - existence of any free program. We wish to make sure that a - company cannot effectively restrict the users of a free program - by obtaining a restrictive license from a patent holder. - Therefore, we insist that any patent license obtained for - a version of the library must be consistent with the full - freedom of use specified in this license. - - Most GNU software, including some libraries, is covered - by the ordinary GNU General Public License. This license, - the GNU Lesser General Public License, applies to certain - designated libraries, and is quite different from the ordinary - General Public License. We use this license for certain - libraries in order to permit linking those libraries into - non-free programs. - - When a program is linked with a library, whether - statically or using a shared library, the combination of - the two is legally speaking a combined work, a derivative of - the original library. The ordinary General Public License - therefore permits such linking only if the entire combination - fits its criteria of freedom. The Lesser General Public - License permits more lax criteria for linking other code with - the library. - - We call this license the "Lesser" General Public License - because it does Less to protect the user's freedom than the - ordinary General Public License. It also provides other - free software developers Less of an advantage over competing - non-free programs. These disadvantages are the reason we - use the ordinary General Public License for many libraries. - However, the Lesser license provides advantages in certain - special circumstances. - - For example, on rare occasions, there may be a special - need to encourage the widest possible use of a certain - library, so that it becomes a de-facto standard. To achieve - this, non-free programs must be allowed to use the library. - A more frequent case is that a free library does the same job - as widely used non-free libraries. In this case, there is - little to gain by limiting the free library to free software - only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library - in non-free programs enables a greater number of people to - use a large body of free software. For example, permission - to use the GNU C Library in non-free programs enables many - more people to use the whole GNU operating system, as well - as its variant, the GNU/Linux operating system. - - Although the Lesser General Public License is Less - protective of the users' freedom, it does ensure that the - user of a program that is linked with the Library has the - freedom and the wherewithal to run that program using a - modified version of the Library. - - The precise terms and conditions for copying, - distribution and modification follow. Pay close attention - to the difference between a "work based on the library" and - a "work that uses the library". The former contains code - derived from the library, whereas the latter must be combined - with the library in order to run. - - - - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND - MODIFICATION - - 0. This License Agreement applies to any software - library or other program which contains a notice placed by - the copyright holder or other authorized party saying it - may be distributed under the terms of this Lesser General - Public License (also called "this License"). Each licensee - is addressed as "you". - - A "library" means a collection of software functions - and/or data prepared so as to be conveniently linked with - application programs (which use some of those functions and - data) to form executables. - - The "Library", below, refers to any such software - library or work which has been distributed under these terms. - A "work based on the Library" means either the Library or any - derivative work under copyright law: that is to say, a work - containing the Library or a portion of it, either verbatim - or with modifications and/or translated straightforwardly - into another language. (Hereinafter, translation is included - without limitation in the term "modification".) - - "Source code" for a work means the preferred form - of the work for making modifications to it. For a library, - complete source code means all the source code for all modules - it contains, plus any associated interface definition files, - plus the scripts used to control compilation and installation - of the library. - - Activities other than copying, distribution and - modification are not covered by this License; they are outside - its scope. The act of running a program using the Library - is not restricted, and output from such a program is covered - only if its contents constitute a work based on the Library - (independent of the use of the Library in a tool for writing - it). Whether that is true depends on what the Library does - and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the - Library's complete source code as you receive it, in any - medium, provided that you conspicuously and appropriately - publish on each copy an appropriate copyright notice and - disclaimer of warranty; keep intact all the notices that - refer to this License and to the absence of any warranty; - and distribute a copy of this License along with the - Library. - - You may charge a fee for the physical act of transferring - a copy, and you may at your option offer warranty protection - in exchange for a fee. - - 2. You may modify your copy or copies of the Library or - any portion of it, thus forming a work based on the Library, - and copy and distribute such modifications or work under the - terms of Section 1 above, provided that you also meet all of - these conditions: - -
- a) The modified work must itself be a software - library. - - b) You must cause the files modified to carry - prominent notices stating that you changed the files and - the date of any change. - - c) You must cause the whole of the work to be - licensed at no charge to all third parties under the - terms of this License. - - d) If a facility in the modified Library refers - to a function or a table of data to be supplied by an - application program that uses the facility, other than as - an argument passed when the facility is invoked, then you - must make a good faith effort to ensure that, in the event - an application does not supply such function or table, - the facility still operates, and performs whatever part - of its purpose remains meaningful. - - (For example, a function in a library to compute - square roots has a purpose that is entirely well-defined - independent of the application. Therefore, Subsection 2d - requires that any application-supplied function or table - used by this function must be optional: if the application - does not supply it, the square root function must still - compute square roots.) -
- - These requirements apply to the modified work as a whole. - If identifiable sections of that work are not derived from - the Library, and can be reasonably considered independent and - separate works in themselves, then this License, and its terms, - do not apply to those sections when you distribute them as - separate works. But when you distribute the same sections - as part of a whole which is a work based on the Library, - the distribution of the whole must be on the terms of this - License, whose permissions for other licensees extend to the - entire whole, and thus to each and every part regardless of - who wrote it. - - Thus, it is not the intent of this section to claim - rights or contest your rights to work written entirely by - you; rather, the intent is to exercise the right to control - the distribution of derivative or collective works based on - the Library. - - In addition, mere aggregation of another work not - based on the Library with the Library (or with a work based - on the Library) on a volume of a storage or distribution - medium does not bring the other work under the scope of this - License. - - 3. You may opt to apply the terms of the ordinary GNU - General Public License instead of this License to a given - copy of the Library. To do this, you must alter all the - notices that refer to this License, so that they refer to the - ordinary GNU General Public License, version 2, instead of - to this License. (If a newer version than version 2 of the - ordinary GNU General Public License has appeared, then you - can specify that version instead if you wish.) Do not make - any other change in these notices. - - Once this change is made in a given copy, it is - irreversible for that copy, so the ordinary GNU General Public - License applies to all subsequent copies and derivative works - made from that copy. - - This option is useful when you wish to copy part - of the code of the Library into a program that is not a - library. - - 4. You may copy and distribute the Library (or a - portion or derivative of it, under Section 2) in object code - or executable form under the terms of Sections 1 and 2 above - provided that you accompany it with the complete corresponding - machine-readable source code, which must be distributed under - the terms of Sections 1 and 2 above on a medium customarily - used for software interchange. - - If distribution of object code is made by offering access - to copy from a designated place, then offering equivalent - access to copy the source code from the same place satisfies - the requirement to distribute the source code, even though - third parties are not compelled to copy the source along with - the object code. - - 5. A program that contains no derivative of any portion - of the Library, but is designed to work with the Library by - being compiled or linked with it, is called a "work that uses - the Library". Such a work, in isolation, is not a derivative - work of the Library, and therefore falls outside the scope - of this License. - - However, linking a "work that uses the Library" with - the Library creates an executable that is a derivative of - the Library (because it contains portions of the Library), - rather than a "work that uses the library". The executable - is therefore covered by this License. Section 6 states terms - for distribution of such executables. - - When a "work that uses the Library" uses material from a - header file that is part of the Library, the object code for - the work may be a derivative work of the Library even though - the source code is not. Whether this is true is especially - significant if the work can be linked without the Library, - or if the work is itself a library. The threshold for this - to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, - data structure layouts and accessors, and small macros and - small inline functions (ten lines or less in length), then the - use of the object file is unrestricted, regardless of whether - it is legally a derivative work. (Executables containing - this object code plus portions of the Library will still fall - under Section 6.) - - Otherwise, if the work is a derivative of the Library, - you may distribute the object code for the work under the - terms of Section 6. Any executables containing that work - also fall under Section 6, whether or not they are linked - directly with the Library itself. - - 6. As an exception to the Sections above, you may - also combine or link a "work that uses the Library" with - the Library to produce a work containing portions of the - Library, and distribute that work under terms of your choice, - provided that the terms permit modification of the work for - the customer's own use and reverse engineering for debugging - such modifications. - - You must give prominent notice with each copy of the - work that the Library is used in it and that the Library - and its use are covered by this License. You must supply a - copy of this License. If the work during execution displays - copyright notices, you must include the copyright notice for - the Library among them, as well as a reference directing the - user to the copy of this License. Also, you must do one of - these things: - -
- a) Accompany the work with the complete corresponding - machine-readable source code for the Library including - whatever changes were used in the work (which must - be distributed under Sections 1 and 2 above); and, - if the work is an executable linked with the Library, - with the complete machine-readable "work that uses the - Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce - a modified executable containing the modified Library. - (It is understood that the user who changes the contents - of definitions files in the Library will not necessarily - be able to recompile the application to use the modified - definitions.) - - b) Use a suitable shared library mechanism for - linking with the Library. A suitable mechanism is one - that (1) uses at run time a copy of the library already - present on the user's computer system, rather than copying - library functions into the executable, and (2) will - operate properly with a modified version of the library, - if the user installs one, as long as the modified version - is interface-compatible with the version that the work - was made with. - - c) Accompany the work with a written offer, valid for - at least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering - access to copy from a designated place, offer equivalent - access to copy the above specified materials from the - same place. - - e) Verify that the user has already received a - copy of these materials or that you have already sent - this user a copy. -
- - For an executable, the required form of the "work that - uses the Library" must include any data and utility programs - needed for reproducing the executable from it. However, - as a special exception, the materials to be distributed need - not include anything that is normally distributed (in either - source or binary form) with the major components (compiler, - kernel, and so on) of the operating system on which the - executable runs, unless that component itself accompanies - the executable. - - It may happen that this requirement contradicts the - license restrictions of other proprietary libraries that do not - normally accompany the operating system. Such a contradiction - means you cannot use both them and the Library together in - an executable that you distribute. - - 7. You may place library facilities that are a work - based on the Library side-by-side in a single library together - with other library facilities not covered by this License, - and distribute such a combined library, provided that the - separate distribution of the work based on the Library and - of the other library facilities is otherwise permitted, - and provided that you do these two things: - -
- a) Accompany the combined library with a copy of - the same work based on the Library, uncombined with any - other library facilities. This must be distributed under - the terms of the Sections above. - - b) Give prominent notice with the combined library of - the fact that part of it is a work based on the Library, - and explaining where to find the accompanying uncombined - form of the same work. -
- - 8. You may not copy, modify, sublicense, link with, - or distribute the Library except as expressly provided - under this License. Any attempt otherwise to copy, modify, - sublicense, link with, or distribute the Library is void, and - will automatically terminate your rights under this License. - However, parties who have received copies, or rights, from - you under this License will not have their licenses terminated - so long as such parties remain in full compliance. - - 9. You are not required to accept this License, - since you have not signed it. However, nothing else grants - you permission to modify or distribute the Library or its - derivative works. These actions are prohibited by law if - you do not accept this License. Therefore, by modifying or - distributing the Library (or any work based on the Library), - you indicate your acceptance of this License to do so, and - all its terms and conditions for copying, distributing or - modifying the Library or works based on it. - - 10. Each time you redistribute the Library (or any work - based on the Library), the recipient automatically receives - a license from the original licensor to copy, distribute, - link with or modify the Library subject to these terms and - conditions. You may not impose any further restrictions - on the recipients' exercise of the rights granted herein. - You are not responsible for enforcing compliance by third - parties with this License. - - 11. If, as a consequence of a court judgment or - allegation of patent infringement or for any other reason - (not limited to patent issues), conditions are imposed - on you (whether by court order, agreement or otherwise) - that contradict the conditions of this License, they do not - excuse you from the conditions of this License. If you cannot - distribute so as to satisfy simultaneously your obligations - under this License and any other pertinent obligations, then - as a consequence you may not distribute the Library at all. - For example, if a patent license would not permit royalty-free - redistribution of the Library by all those who receive copies - directly or indirectly through you, then the only way you - could satisfy both it and this License would be to refrain - entirely from distribution of the Library. - - If any portion of this section is held invalid or - unenforceable under any particular circumstance, the balance - of the section is intended to apply, and the section as a - whole is intended to apply in other circumstances. - - It is not the purpose of this section to induce you - to infringe any patents or other property right claims or - to contest validity of any such claims; this section has the - sole purpose of protecting the integrity of the free software - distribution system which is implemented by public license - practices. Many people have made generous contributions to - the wide range of software distributed through that system - in reliance on consistent application of that system; it is - up to the author/donor to decide if he or she is willing to - distribute software through any other system and a licensee - cannot impose that choice. - - This section is intended to make thoroughly clear - what is believed to be a consequence of the rest of this - License. - - 12. If the distribution and/or use of the Library - is restricted in certain countries either by patents or by - copyrighted interfaces, the original copyright holder who - places the Library under this License may add an explicit - geographical distribution limitation excluding those countries, - so that distribution is permitted only in or among countries - not thus excluded. In such case, this License incorporates the - limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised - and/or new versions of the Lesser General Public License from - time to time. Such new versions will be similar in spirit - to the present version, but may differ in detail to address - new problems or concerns. - - Each version is given a distinguishing version number. - If the Library specifies a version number of this License which - applies to it and "any later version", you have the option of - following the terms and conditions either of that version or of - any later version published by the Free Software Foundation. - If the Library does not specify a license version number, - you may choose any version ever published by the Free Software - Foundation. - - 14. If you wish to incorporate parts of the Library - into other free programs whose distribution conditions are - incompatible with these, write to the author to ask for - permission. For software which is copyrighted by the Free - Software Foundation, write to the Free Software Foundation; - we sometimes make exceptions for this. Our decision will be - guided by the two goals of preserving the free status of all - derivatives of our free software and of promoting the sharing - and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, - THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED - BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING - THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY - "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR - IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE - LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, - YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR - CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW - OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY - OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS - PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY - GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING - OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT - NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE - OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF - THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH - HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF - SUCH DAMAGES. - - END OF TERMS AND CONDITIONS -
- - - - How to Apply These Terms to Your New - Libraries - - If you develop a new library, and you want it to be of - the greatest possible use to the public, we recommend making - it free software that everyone can redistribute and change. - You can do so by permitting redistribution under these terms - (or, alternatively, under the terms of the ordinary General - Public License). - - To apply these terms, attach the following notices to - the library. It is safest to attach them to the start of - each source file to most effectively convey the exclusion of - warranty; and each file should have at least the "copyright" - line and a pointer to where the full notice is found. - -
- <one line to give the library's name and a brief - idea of what it does.> - - Copyright © <year> <name of - author> - - This library 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. - - This library 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 this library; if not, - write to the Free Software Foundation, Inc., 59 Temple - Place, Suite 330, Boston, MA 02111-1307 USA -
- - Also add information on how to contact you by electronic - and paper mail. - - You should also get your employer (if you work as - a programmer) or your school, if any, to sign a "copyright - disclaimer" for the library, if necessary. Here is a sample; - alter the names: - -
- Yoyodyne, Inc., hereby disclaims all copyright - interest in the library `Frob' (a library for tweaking - knobs) written by James Random Hacker. - - <signature of Ty Coon>, 1 April 1990 - - Ty Coon, President of Vice -
- - That's all there is to it! -
-
- - - - - MySQL++ User Manual License - - - I. COPYRIGHT - - The copyright to the MySQL++ User Manual is owned by - its authors. - - - - II. LICENSE - - The MySQL++ User Manual may be reproduced and - distributed in whole or in part, in any medium physical or - electronic, provided that this license notice is displayed - in the reproduction. Commercial redistribution is permitted - and encouraged. Thirty days advance notice via email to the - authors of redistribution is appreciated, to give the authors - time to provide updated documents. - - - A. REQUIREMENTS OF MODIFIED WORKS - - All modified documents, including translations, - anthologies, and partial documents, must meet the following - requirements: - - - The modified version must be labeled - as such. - - The person making the modifications - must be identified. - - Acknowledgement of the original author - must be retained. - - The location of the original unmodified - document be identified. - - The original authors' names may - not be used to assert or imply endorsement of the - resulting document without the original authors' - permission. - - - In addition it is requested that: - - - The modifications (including deletions) - be noted. - - The authors be notified by email of the - modification in advance of redistribution, if an email - address is provided in the document. - - - Mere aggregation of the MySQL++ User Manual with - other documents or programs on the same media shall not - cause this license to apply to those other works. - - All translations, derivative documents, or modified - documents that incorporate the MySQL++ User Manual may - not have more restrictive license terms than these, - except that you may require distributors to make the - resulting document available in source format. - - - -
-
- ADDED examples/Makefile.am Index: examples/Makefile.am ================================================================== --- /dev/null +++ examples/Makefile.am @@ -0,0 +1,24 @@ +noinst_PROGRAMS = resetdb simple1 custom1 custom2 custom3 custom4 complic1 fieldinf1 + +noinst_HEADERS = util.hh + +LDADD = $(top_builddir)/sqlplusint/libsqlplus.la @MYSQL_LIBS@ +INCLUDES = -I$(top_srcdir)/sqlplusint @MYSQL_CFLAGS@ + +simple1_SOURCES = simple1.cc + +# sinisa_ex_SOURCES = sinisa_ex.cc + +resetdb_SOURCES = resetdb.cc util.cc + +custom1_SOURCES = custom1.cc + +custom2_SOURCES = custom2.cc util.cc + +custom3_SOURCES = custom3.cc util.cc + +custom4_SOURCES = custom4.cc + +complic1_SOURCES = complic1.cc + +fieldinf1_SOURCES = fieldinf1.cc DELETED examples/cgi_jpeg.cpp Index: examples/cgi_jpeg.cpp ================================================================== --- examples/cgi_jpeg.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/*********************************************************************** - cgi_jpeg.cpp - Example code showing how to fetch JPEG data from a BLOB - column and send it back to a browser that requested it by ID. - - Use load_jpeg.cpp to load JPEG files into the database we query. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -#include - -using namespace std; -using namespace mysqlpp; - -#define IMG_DATABASE "mysql_cpp_data" -#define IMG_HOST "localhost" -#define IMG_USER "root" -#define IMG_PASSWORD "nunyabinness" - -sql_create_2(images, - 1, 2, - mysqlpp::sql_int_unsigned, id, - mysqlpp::sql_blob, data) - -int -main() -{ - unsigned int img_id = 0; - char* cgi_query = getenv("QUERY_STRING"); - if (cgi_query) { - if ((strlen(cgi_query) < 4) || memcmp(cgi_query, "id=", 3)) { - cout << "Content-type: text/plain" << endl << endl; - cout << "ERROR: Bad query string" << endl; - return 1; - } - else { - img_id = atoi(cgi_query + 3); - } - } - else { - cerr << "Put this program into a web server's cgi-bin " - "directory, then" << endl; - cerr << "invoke it with a URL like this:" << endl; - cerr << endl; - cerr << " http://server.name.com/cgi-bin/cgi_jpeg?id=2" << - endl; - cerr << endl; - cerr << "This will retrieve the image with ID 2." << endl; - cerr << endl; - cerr << "You will probably have to change some of the #defines " - "at the top of" << endl; - cerr << "examples/cgi_jpeg.cpp to allow the lookup to work." << - endl; - return 1; - } - - Connection con(use_exceptions); - try { - con.connect(IMG_DATABASE, IMG_HOST, IMG_USER, IMG_PASSWORD); - Query query = con.query(); - query << "SELECT * FROM images WHERE id = " << img_id; - ResUse res = query.use(); - if (res) { - images img = res.fetch_row(); - cout << "Content-type: image/jpeg" << endl; - cout << "Content-length: " << img.data.length() << "\n\n"; - cout << img.data; - } - else { - cout << "Content-type: text/plain" << endl << endl; - cout << "ERROR: No such image with ID " << img_id << endl; - } - } - catch (const BadQuery& er) { - // Handle any query errors - cout << "Content-type: text/plain" << endl << endl; - cout << "QUERY ERROR: " << er.what() << endl; - return 1; - } - catch (const Exception& er) { - // Catch-all for any other MySQL++ exceptions - cout << "Content-type: text/plain" << endl << endl; - cout << "GENERAL ERROR: " << er.what() << endl; - return 1; - } - - return 0; -} ADDED examples/complic1.cc Index: examples/complic1.cc ================================================================== --- /dev/null +++ examples/complic1.cc @@ -0,0 +1,68 @@ + +#include +#include +#include + +int main() { + try { // its in one big try block + + Connection con(use_exceptions); + con.connect("mysql_cpp_data"); + // Here I broke making the connection into two calls. + // The first one creates the Connection object with the + // use exceptions option turned on and the second one + // makes the connection + + Query query = con.query(); + + query << "select * from stock"; + Result res = query.store(); + + cout << "Query: " << query.preview() << endl; + cout << "Records Found: " << res.size() << endl << endl; + + Row row; + cout.setf(ios::left); + cout << setw(17) << "Item" + << setw(4) << "Num" + << setw(7) << "Weight" + << setw(7) << "Price" + << "Date" << endl + << endl; + + Result::iterator i; + + cout.precision(3); + for (i = res.begin(); i != res.end(); i++) { + row = *i; + cout << setw(17) << row["item"] << setw(4) << row[1] + << setw(7) << (double)row[2] + // This is converting the row to a double so that we + // can set the precision of it. + // ColData has the nice feature that it will convert to + // any of the basic c++ types. if there is a problem + // in the conversion it will throw an exception (which I + // cache below). To test it try changing the 2 in row[2] + // to row[0] + << setw(7) << (double)row[3]; + Date date = row["sdate"]; + // The ColData is implicitly converted to a date here. + cout.setf(ios::right); + cout.fill('0'); + cout << setw(2) << date.month << "-" << setw(2) << date.day << endl; + cout.fill(' '); + cout.unsetf(ios::right); + } + return 0; + } catch (BadQuery er) { // handle any connection or + // query errors that may come up + cerr << "Error: " << er.error << endl; + return -1; + } catch (BadConversion er) { // handle bad conversions + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} + + ADDED examples/custom1.cc Index: examples/custom1.cc ================================================================== --- /dev/null +++ examples/custom1.cc @@ -0,0 +1,78 @@ + +#include +#include +#include +#include +#include + +sql_create_5 (stock, // struct name, + 1, 5, // I'll explain these latter + string, item, // type, id + int, num, + double, weight, + double, price, + Date, sdate) + +// this is calling a very complex macro which will create a custom +// struct "stock" which has the variables: +// string item +// int num +// ... +// Date sdate +// defined as well methods to help populate the class from a mysql row +// among other things that I'll get too in a latter example + +int main () { + try { // its in one big try block + Connection con (use_exceptions); + con.connect ("mysql_cpp_data"); + Query query = con.query (); + query << "select * from stock"; + + vector < stock > res; + query.storein (res); + // this is storing the results into a vector of the custom struct + // "stock" which was created my the macro above. + + cout.setf (ios::left); + cout << setw (17) << "Item" + << setw (4) << "Num" + << setw (7) << "Weight" + << setw (7) << "Price" + << "Date" << endl + << endl; + + // Now we we iterate through the vector using an iterator and + // produce output similar to that using Row + // Notice how we call the actual variables in i and not an index + // offset. This is because the macro at the begging of the file + // set up an *actual* struct of type stock which contains the + // variables item, num, weight, price, and data. + + cout.precision(3); + vector ::iterator i; + for (i = res.begin (); i != res.end (); i++) { + cout << setw (17) << i->item.c_str () + // unfortunally the gnu string class does not respond to format + // modifers so I have to convert it to a conat char *. + << setw (4) << i->num + << setw (7) << i->weight + << setw (7) << i->price + << i->sdate + << endl; + } + return 0; + + } catch (BadQuery er){ // handle any connection + // or query errors that may come up + cerr << "Error: " << er.error << endl; + return -1; + + } catch (BadConversion er) { + // we still need to cache bad conversions incase something goes + // wrong when the data is converted into stock + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} DELETED examples/custom1.cpp Index: examples/custom1.cpp ================================================================== --- examples/custom1.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/*********************************************************************** - custom1.cpp - Example that produces the same results as simple1, but it - uses a Specialized SQL Structure to store the results instead of a - MySQL++ Result object. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "stock.h" -#include "util.h" - -#include -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - // Wrap all MySQL++ interactions in one big try block, so any - // errors are handled gracefully. - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Retrieve the entire contents of the stock table, and store - // the data in a vector of 'stock' SSQLS structures. - mysqlpp::Query query = con.query(); - query << "select * from stock"; - vector res; - query.storein(res); - - // Display the result set - print_stock_header(res.size()); - vector::iterator it; - for (it = res.begin(); it != res.end(); ++it) { - print_stock_row(it->item, it->num, it->weight, it->price, - it->sdate); - } - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions; e.g. type mismatch populating 'stock' - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} ADDED examples/custom2.cc Index: examples/custom2.cc ================================================================== --- /dev/null +++ examples/custom2.cc @@ -0,0 +1,49 @@ + +#include +#include +#include +#include +#include "util.hh" +// util.hh/cc contains the print_stock_table function + +sql_create_5(stock, 1, 5, string, item, int, num, + double, weight, double, price, Date, sdate) + +int main() { + try { // its in one big try block + + Connection con(use_exceptions); + con.connect("mysql_cpp_data"); + Query query = con.query(); + + stock row; + // create an empty stock object + + /* row.item = "Hot Dogs"; + row.num = 100; + row.weight = 1.5; + row.price = 1.75; + row.sdate = "1998-09-25"; */ + row.set("Hot Dogs", 100, 1.5, 1.75, "1998-09-25"); + // populate stock + + query.insert(row); + // form the query to insert the row + // the table name is the name of the struct by default + cout << "Query : " << query.preview() << endl; + // show the query about to be executed + query.execute(); + // execute a query that does not return a result set + + print_stock_table(query); + // now print the new table; + + } catch (BadQuery er) { + cerr << "Error: " << er.error << endl; + return -1; + } catch (BadConversion er) { + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} DELETED examples/custom2.cpp Index: examples/custom2.cpp ================================================================== --- examples/custom2.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/*********************************************************************** - custom2.cpp - Example showing how to insert a row using the Specialized - SQL Structures feature of MySQL++. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "stock.h" -#include "util.h" - -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Create and populate a stock object. We could also have used - // the set() member, which takes the same parameters as this - // constructor. - stock row("Hot Dogs", 100, 1.5, 1.75, "1998-09-25"); - - // Form the query to insert the row into the stock table. - mysqlpp::Query query = con.query(); - query.insert(row); - - // Show the query about to be executed. - cout << "Query: " << query.preview() << endl; - - // Execute the query. We use execute() because INSERT doesn't - // return a result set. - query.execute(); - - // Print the new table. - mysqlpp::Result res; - get_stock_table(query, res); - print_stock_rows(res); - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} ADDED examples/custom3.cc Index: examples/custom3.cc ================================================================== --- /dev/null +++ examples/custom3.cc @@ -0,0 +1,56 @@ + +#include +#include +#include +#include +#include "util.hh" +// util.hh/cc contains the print_stock_table function + +sql_create_5(stock, 1, 5, string, item, int, num, + double, weight, double, price, Date, sdate) + +int main() { + try { // its in one big try block + + Connection con(use_exceptions); + con.connect("mysql_cpp_data"); + Query query = con.query(); + + query << "select * from stock where item = \"Hotdogs' Buns\" "; + + Result res = query.store(); + if (res.empty()) + throw BadQuery("Hotdogs' Buns not found in table, run reset-db"); + // here we are testing if the query was successful, if not throw a bad query + stock row = res[0]; + // because there should only be one row in this query we don't + // need to use a vector. Just store the first row directly in + // "row". We can do this because one of the constructors for + // stock takes a Row as an parameter. + + stock row2 = row; + // Now we need to create a copy so that the replace query knows + // what the original values are. + + row.item = "Hotdog Buns"; // now change item + + query.update(row2, row); + // form the query to replace the row + // the table name is the name of the struct by default + cout << "Query : " << query.preview() << endl; + // show the query about to be executed + query.execute(); + // execute a query that does not return a result set + + print_stock_table(query); + // now print the new table; + + } catch (BadQuery er) { + cerr << "Error: " << er.error << endl; + return -1; + } catch (BadConversion er) { + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} DELETED examples/custom3.cpp Index: examples/custom3.cpp ================================================================== --- examples/custom3.cpp +++ /dev/null @@ -1,105 +0,0 @@ -/*********************************************************************** - custom3.cpp - Example showing how to update an SQL row using the - Specialized SQL Structures feature of MySQL++. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "stock.h" -#include "util.h" - -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Build a query to retrieve the stock item that has Unicode - // characters encoded in UTF-8 form. - mysqlpp::Query query = con.query(); - query << "select * from stock where item = \"Nürnberger Brats\""; - - // Retrieve the row, throwing an exception if it fails. - mysqlpp::Result res = query.store(); - if (res.empty()) { - throw mysqlpp::BadQuery("UTF-8 bratwurst item not found in " - "table, run resetdb"); - } - - // Because there should only be one row in the result set, - // there's no point in storing the result in an STL container. - // We can store the first row directly into a stock structure - // because one of an SSQLS's constructors takes a Row object. - stock row = res.at(0); - - // Create a copy so that the replace query knows what the - // original values are. - stock orig_row = row; - - // Change the stock object's item to use only 7-bit ASCII, and - // to deliberately be wider than normal column widths printed - // by print_stock_table(). - row.item = "Nuerenberger Bratwurst"; - - // Form the query to replace the row in the stock table. - query.update(orig_row, row); - - // Show the query about to be executed. - cout << "Query: " << query.preview() << endl; - - // Run the query with execute(), since UPDATE doesn't return a - // result set. - query.execute(); - - // Print the new table contents. - get_stock_table(query, res); - print_stock_rows(res); - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} ADDED examples/custom4.cc Index: examples/custom4.cc ================================================================== --- /dev/null +++ examples/custom4.cc @@ -0,0 +1,73 @@ + +#include +#include +#include +#include +#include + +sql_create_5(stock, + 1, // This number is used to make a SSQLS less-than-comparable. + // If this number is n then if the first n elements are the + // same the two SSQLS are the same. + // In this case if two two stock's "item" are the same then + // the two stock are the same. + 5, // this number should generally be the same as the number of + // elements in the list unless you have a good reason not to. + + string,item, int,num, double,weight, double,price, Date,sdate) + +int main() { + try { // its in one big try block + + Connection con(use_exceptions); + con.connect("mysql_cpp_data"); + Query query = con.query(); + + query << "select * from stock"; + + set res; + query.storein(res); + // here we are storing the elements in a set not a vector. + + cout.setf (ios::left); + cout << setw (17) << "Item" + << setw (4) << "Num" + << setw (7) << "Weight" + << setw (7) << "Price" + << "Date" << endl + << endl; + + // Now we we iterate through the set. Since it is a set the list will + // naturally be in order. + + set::iterator i; + cout.precision(3); + for (i = res.begin (); i != res.end (); i++) { + cout << setw (17) << i->item.c_str () + << setw (4) << i->num + << setw (7) << i->weight + << setw (7) << i->price + << i->sdate + << endl; + } + + i = res.find(stock("Hamburger Buns")); + if (i != res.end()) + cout << "Hamburger Buns found. Currently " << i->num << " in stock.\n"; + else + cout << "Sorry no Hamburger Buns found in stock\n"; + + // Now we are using the set's find method to find out how many + // Hamburger Buns are in stock. + + return 0; + + } catch (BadQuery er) { + cerr << "Error: " << er.error << endl; + return -1; + } catch (BadConversion er) { + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} DELETED examples/custom4.cpp Index: examples/custom4.cpp ================================================================== --- examples/custom4.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/*********************************************************************** - custom4.cpp - Example very similar to custom1.cpp, except that it - stores its result set in an STL set container. This demonstrates - how one can manipulate MySQL++ result sets in a very natural C++ - style. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "stock.h" -#include "util.h" - -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Retrieve all rows from the stock table and put them in an - // STL set. Notice that this works just as well as storing them - // in a vector, which we did in custom1.cpp. It works because - // SSQLS objects are less-than comparable. - mysqlpp::Query query = con.query(); - query << "select * from stock"; - set res; - query.storein(res); - - // Display the result set. Since it is an STL set and we set up - // the SSQLS to compare based on the item column, the rows will - // be sorted by item. - print_stock_header(res.size()); - set::iterator it; - cout.precision(3); - for (it = res.begin(); it != res.end(); ++it) { - print_stock_row(it->item.c_str(), it->num, it->weight, - it->price, it->sdate); - } - - // Use set's find method to look up a stock item by item name. - // This also uses the SSQLS comparison setup. - it = res.find(stock("Hotdog Buns")); - if (it != res.end()) { - cout << endl << "Currently " << it->num << - " hotdog buns in stock." << endl; - } - else { - cout << endl << "Sorry, no hotdog buns in stock." << endl; - } - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/custom5.cpp Index: examples/custom5.cpp ================================================================== --- examples/custom5.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/*********************************************************************** - custom5.cpp - Example showing how to use the equal_list() member of - some SSQLS types to build SELECT queries with custom WHERE clauses. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, (c) 2004, 2005 by Educational Technology Resources, Inc., and - (c) 2005 by Chris Frey. Others may also hold copyrights on code in - this file. See the CREDITS 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 "stock.h" -#include "util.h" - -#include -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Get all the rows in the stock table. - mysqlpp::Query query = con.query(); - query << "select * from stock"; - vector res; - query.storein(res); - - if (res.size() > 0) { - // Build a select query using the data from the first row - // returned by our previous query. - query.reset(); - query << "select * from stock where " << - res[0].equal_list(" and ", stock_weight, stock_price); - - // Display the finished query. - cout << "Custom query:\n" << query.preview() << endl; - } - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/custom6.cpp Index: examples/custom6.cpp ================================================================== --- examples/custom6.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/*********************************************************************** - custom6.cpp - Same as custom1, except that it requests only a subset of - the stock table. See also simple1, for another way to accomplish - the same thing, without using SSQLS. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include -#include - -#include -#include -#include - -using namespace std; - -// To store a subset of a row, we define an SSQLS containing just the -// fields that we will store. There are complications here that are -// covered in the user manual. -sql_create_1(stock_subset, - 1, 0, - string, item) - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Retrieve a subset of the stock table, and store the data in - // a vector of 'stock_subset' SSQLS structures. - mysqlpp::Query query = con.query(); - query << "select item from stock"; - vector res; - query.storein(res); - - // Display the result set - cout << "We have:" << endl; - vector::iterator it; - for (it = res.begin(); it != res.end(); ++it) { - cout << '\t' << it->item << endl; - } - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions; e.g. type mismatch populating 'stock' - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/dbinfo.cpp Index: examples/dbinfo.cpp ================================================================== --- examples/dbinfo.cpp +++ /dev/null @@ -1,184 +0,0 @@ -/*********************************************************************** - dbinfo.cpp - Example showing how to request information about the - database schema, such as table names, column types, etc. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include -#include -#include -#include - -using namespace std; -using namespace mysqlpp; - -vector yy; - -static ostream& -separator(ostream& os) -{ - os << endl << "---------------------------" << endl << endl; - return os; -} - -int -main(int argc, char* argv[]) -{ - Connection con(use_exceptions); - try { - connect_to_db(argc, argv, con, ""); - - // Show MySQL version - cout << "MySQL version: " << con.client_info() << separator; - Query query = con.query(); - - // Show all the databases we can see - query << "show databases"; - cout << "Query: " << query.preview() << endl; - - Result res = query.store(); - cout << "Databases found: " << res.size(); - - Row row; - cout.setf(ios::left); - Result::iterator i; - for (i = res.begin(); i != res.end(); ++i) { - row = *i; - cout << endl << '\t' << setw(17) << row.at(0); - } - cout << separator; - - // Show the tables in the mysql database - con.select_db("mysql"); - - query.reset(); - query << "show tables"; - cout << "Query: " << query.preview() << endl; - - res = query.store(); - cout << "Tables found: " << res.size(); - - cout.setf(ios::left); - for (i = res.begin(); i != res.end(); ++i) { - row = *i; - string xx(row.at(0)); - cout << endl << '\t' << setw(17) << row.at(0); - yy.push_back(xx); - } - cout << separator; - - // Show information about each of the tables we found - for (unsigned int j = 0; j < yy.size(); ++j) { - query.reset(); - query << "describe " << yy[j] << ""; - cout << "Query: " << query.preview() << endl; - res = query.store(); - unsigned int columns = res.num_fields(), counter; - vector widths; - for (counter = 0; counter < columns; counter++) { - string s = res.names(counter); - if (s.compare("field") == 0) { - widths.push_back(22); - } - else if (s.compare("type") == 0) { - widths.push_back(20); - } - else if (s.compare("null") == 0) { - widths.push_back(4); - } - else if (s.compare("key") == 0) { - widths.push_back(3); - } - else if (s.compare("extra") == 0) { - widths.push_back(0); - } - else { - widths.push_back(15); - } - - if (widths[counter]) { - cout << '|' << setw(widths[counter]) << - res.names(counter) << '|'; - } - } - cout << endl; - - for (i = res.begin(); i != res.end(); ++i) { - row = *i; - for (counter = 0; counter < columns; counter++) { - if (widths[counter]) { - cout << ' ' << setw(widths[counter]) << - row.at(counter) << ' '; - } - } - cout << endl; - } - - cout << separator; - } - - // Show the user table contents - query.reset(); - query << "select * from user"; - cout << "Query: " << query.preview() << endl << endl; - - res = query.store(); - int columns = res.num_fields(); - cout << "fields = " << res.num_fields() << ", rows = " << - res.size() << endl; - volatile MYSQL_RES* ress = res.raw_result(); - if (!ress) - return -1; - for (i = res.begin(); i != res.end(); ++i) { - row = *i; - for (int counter = 0; counter < columns; counter++) { - cout << row.at(counter) << " "; - } - cout << endl; - } - } - catch (const BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} ADDED examples/fieldinf1.cc Index: examples/fieldinf1.cc ================================================================== --- /dev/null +++ examples/fieldinf1.cc @@ -0,0 +1,66 @@ + +#include +#include +#include + +int main() { + try { // its in one big try block + + Connection con(use_exceptions); + con.connect("mysql_cpp_data"); + Query query = con.query(); + query << "select * from stock"; + Result res = query.store(); + + cout << "Query: " << query.preview() << endl; + cout << "Records Found: " << res.size() << endl << endl; + + cout << "Query Info:\n"; + cout.setf(ios::left); + + for (unsigned int i = 0; i < res.names().size(); i++) { + cout << setw(2) << i + << setw(15) << res.names(i).c_str() + // this is the name of the field + << setw(15) << res.types(i).sql_name() + // this is the SQL identifier name + // Result::types(unsigned int) returns a mysql_type_info which in many + // ways is like type_info except that it has additional sql type + // information in it. (with one of the methods being sql_name()) + << setw(20) << res.types(i).name() + // this is the C++ identifier name which most closely resembles + // the sql name (its is implementation defined and often not very readable) + << endl; + } + + cout << endl; + + if (res.types(0) == typeid(string)) + cout << "Field 'item' is of an sql type which most closely resembles a\n" + << "the c++ string type\n"; + // this is demonstrating how a mysql_type_info can be compared with a c++ + // type_info. + + if (res.types(1) == typeid(short int)) + cout << "Field 'num' is of an sql type which most closely resembles a\n" + << "the c++ short int type\n"; + else if (res.types(1).base_type() == typeid(short int)) + cout << "Field 'num' base type is of an sql type which most closely \n" + << "resembles a the c++ short int type\n"; + // However you have to be careful as if it can be null the actual type is + // Null not TYPE. So you should always use the base_type method + // to get at the underlying type. If the type is not null than this base + // type would be the same as its type. + + return 0; + } catch (BadQuery er) { + cerr << "Error: " << er.error << endl; + return -1; + } catch (BadConversion er) { // handle bad conversions + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } +} + + DELETED examples/fieldinf1.cpp Index: examples/fieldinf1.cpp ================================================================== --- examples/fieldinf1.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/*********************************************************************** - fieldinf1.cpp - Example showing how to request information about the - fields in a table, such as their SQL and C++-equivalent types, as - MySQL++ sees it. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include -#include - -using namespace std; -using namespace mysqlpp; - -int -main(int argc, char *argv[]) -{ - try { - Connection con(use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - Query query = con.query(); - query << "select * from stock"; - cout << "Query: " << query.preview() << endl; - - Result res = query.store(); - cout << "Records Found: " << res.size() << endl << endl; - - cout << "Query Info:\n"; - cout.setf(ios::left); - - for (unsigned int i = 0; i < res.names().size(); i++) { - cout << setw(2) << i - // this is the name of the field - << setw(15) << res.names(i).c_str() - // this is the SQL identifier name - // Result::types(unsigned int) returns a mysql_type_info which in many - // ways is like type_info except that it has additional sql type - // information in it. (with one of the methods being sql_name()) - << setw(15) << res.types(i).sql_name() - // this is the C++ identifier name which most closely resembles - // the sql name (its is implementation defined and often not very readable) - << setw(20) << res.types(i).name() - << endl; - } - - cout << endl; - - if (res.types(0) == typeid(string)) { - // this is demonstrating how a mysql_type_info can be - // compared with a C++ type_info. - cout << "Field 'item' is of an SQL type which most " - "closely resembles\nthe C++ string type\n"; - } - - if (res.types(1) == typeid(longlong)) { - cout << "Field 'num' is of an SQL type which most " - "closely resembles\nC++ long long int type\n"; - } - else if (res.types(1).base_type() == typeid(longlong)) { - // you have to be careful as if it can be null the actual - // type is Null not TYPE. So you should always use - // the base_type method to get at the underlying type. - // If the type is not null than this base type would be - // the same as its type. - cout << "Field 'num' base type is of an SQL type which " - "most closely\nresembles the C++ long long int type\n"; - } - } - catch (const BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/for_each.cpp Index: examples/for_each.cpp ================================================================== --- examples/for_each.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/*********************************************************************** - for_each.cpp - Demonstrates Query::for_each(), showing how to perform - an arbitrary action on each row in a result set. - - Copyright (c) 2005-2007 by Joel Fielder and Educational Technology - Resources, Inc. Others may also hold copyrights on code in this file. - See the CREDITS 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 "util.h" -#include "stock.h" - -#include - -#include - -#include - - -// Define a functor to collect statistics about the stock table -class gather_stock_stats -{ -public: - gather_stock_stats() : - items_(0), - weight_(0), - cost_(0) - { - } - - void operator()(const stock& s) - { - items_ += s.num; - weight_ += (s.num * s.weight); - cost_ += (s.num * s.price); - } - -private: - mysqlpp::sql_bigint items_; - mysqlpp::sql_double weight_, cost_; - - friend std::ostream& operator<<(std::ostream& os, - const gather_stock_stats& ss); -}; - - -// Dump the contents of gather_stock_stats to a stream in human-readable -// form. -std::ostream& -operator<<(std::ostream& os, const gather_stock_stats& ss) -{ - os << ss.items_ << " items " << - "weighing " << ss.weight_ << " stone and " << - "costing " << ss.cost_ << " cowrie shells"; - return os; -} - - -int -main(int argc, char *argv[]) -{ - try { - // Connect to the sample database - mysqlpp::Connection con; - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Gather and display the stats for the entire stock table - mysqlpp::Query query = con.query(); - std::cout << "There are " << query.for_each(stock(), - gather_stock_stats()) << '.' << std::endl; - } - catch (const mysqlpp::BadQuery& e) { - // Something went wrong with the SQL query. - std::cerr << "Query failed: " << e.what() << std::endl; - return 1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - std::cerr << "Error: " << er.what() << std::endl; - return 1; - } - - return 0; -} DELETED examples/load_jpeg.cpp Index: examples/load_jpeg.cpp ================================================================== --- examples/load_jpeg.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/*********************************************************************** - load_jpeg.cpp - Example showing how to insert BLOB data into the - database from a file. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include - -using namespace std; -using namespace mysqlpp; - -static bool -is_jpeg(const unsigned char* img_data) -{ - return (img_data[0] == 0xFF) && (img_data[1] == 0xD8) && - ((memcmp(img_data + 6, "JFIF", 4) == 0) || - (memcmp(img_data + 6, "Exif", 4) == 0)); -} - - -int -main(int argc, char *argv[]) -{ - // Assume that the last command line argument is a file. Try to - // read that file's data into img_data, and check it to see if it - // appears to be a JPEG file. Bail otherwise. - string img_data; - if ((argc > 1) && (argv[1][0] != '-')) { - ifstream img_file(argv[argc - 1], ios::ate); - if (img_file) { - size_t img_size = img_file.tellg(); - if (img_size > 10) { - img_file.seekg(0, ios::beg); - char* img_buffer = new char[img_size]; - img_file.read(img_buffer, img_size); - if (is_jpeg((unsigned char*)img_buffer)) { - img_data.assign(img_buffer, img_size); - } - else { - cerr << "File does not appear to be a JPEG!" << endl; - } - delete[] img_buffer; - } - else { - cerr << "File is too short to be a JPEG!" << endl; - } - } - } - if (img_data.empty()) { - print_usage(argv[0], "[jpeg_file]"); - return 1; - } - --argc; // pop filename argument off end of list - - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Insert image data into the BLOB column in the images table. - // We're inserting it as an std::string instead of using the raw - // data buffer allocated above because we don't want the data - // treated as a C string, which would truncate the data at the - // first null character. - Query query = con.query(); - query << "INSERT INTO images (data) VALUES(\"" << - mysqlpp::escape << img_data << "\")"; - ResNSel res = query.execute(); - - // If we get here, insertion succeeded - cout << "Inserted \"" << argv[argc] << - "\" into images table, " << img_data.size() << - " bytes, ID " << res.insert_id << endl; - } - catch (const BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/logo.jpg Index: examples/logo.jpg ================================================================== --- examples/logo.jpg +++ /dev/null cannot compute difference between binary files DELETED examples/multiquery.cpp Index: examples/multiquery.cpp ================================================================== --- examples/multiquery.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/*********************************************************************** - multiquery.cpp - Example showing how to iterate over result sets upon - execution of a query that returns more than one result set. You can - get multiple result sets when executing multiple separate SQL - statments in a single query, or when dealing with the results of - calling a stored procedure. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, (c) 2004, 2005 by Educational Technology Resources, Inc., - and (c) 2005 by Arnon Jalon. Others may also hold copyrights on - code in this file. See the CREDITS 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 "util.h" - -#include - -#include -#include -#include - -using namespace std; -using namespace mysqlpp; - - -typedef vector IntVectorType; - - -static void -print_header(IntVectorType& widths, Result& res) -{ - cout << " |" << setfill(' '); - for (size_t i = 0; i < res.names().size(); i++) { - cout << " " << setw(widths.at(i)) << res.names(i) << " |"; - } - cout << endl; -} - - -static void -print_row(IntVectorType& widths, Row& row) -{ - cout << " |" << setfill(' '); - for (size_t i = 0; i < row.size(); i++) { - cout << " " << setw(widths.at(i)) << row.raw_data(i) << " |"; - } - cout << endl; -} - - -static void -print_row_separator(IntVectorType& widths) -{ - cout << " +" << setfill('-'); - for (size_t i = 0; i < widths.size(); i++) { - cout << "-" << setw(widths.at(i)) << '-' << "-+"; - } - cout << endl; -} - - -static void -print_result(Result& res, int index) -{ - // Show how many rows are in result, if any - int num_results = res.size(); - if (res && (num_results > 0)) { - cout << "Result set " << index << " has " << num_results << - " row" << (num_results == 1 ? "" : "s") << ':' << endl; - } - else { - cout << "Result set " << index << " is empty." << endl; - return; - } - - // Figure out the widths of the result set's columns - IntVectorType widths; - int size = res.columns(); - for (int i = 0; i < size; i++) { - mysql_type_info mti(res.fields(i)); - widths.push_back((res.names(i).size() > mti.max_length()) ? - res.names(i).size() : mti.max_length()); - } - - // Print result set header - print_row_separator(widths); - print_header(widths, res); - print_row_separator(widths); - - // Display the result set contents - for (int i = 0; i < num_results; ++i) { - Row row = res.fetch_row(); - print_row(widths, row); - } - - // Print result set footer - print_row_separator(widths); -} - - -static void -print_multiple_results(Query& query) -{ - try { - // Execute query and print all result sets - Result res = query.store(); - print_result(res, 0); - for (int i = 1; query.more_results(); ++i) { - res = query.store_next(); - print_result(res, i); - } - } - catch (Exception& err) { - // Something bad happened.... - cerr << "Multi-query failure: " << err.what() << endl; - exit(1); - } -} - - -int -main(int argc, char *argv[]) -{ - Connection con; - try { - // Enable multi-queries. Notice that we can set connection - // options before the connection is established, which the - // underlying MySQL C API does not allow. In this particular - // case, this is not a mere nicety: the multi-query option has - // a side effect of setting one of the flags used when - // establishing the database server connection. We could set it - // directly, but then we couldn't use connect_to_db(). - con.set_option(Connection::opt_multi_statements, true); - - // Connect to database - if (!connect_to_db(argc, argv, con)) { - return 1; - } - } - catch (const BadOption& err) { - if (err.what_option() == Connection::opt_multi_statements) { - cerr << "This example only works when MySQL++ is built " - "against MySQL C API" << endl; - cerr << "version 4.1.01 or later." << endl; - } - else { - cerr << "Unexpected option failure: " << err.what() << endl; - } - return 1; - } - catch (const ConnectionFailed& err) { - cerr << "Failed to connect to database server: " << - err.what() << endl; - return 1; - } - catch (const Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return 1; - } - - // Set up query with multiple queries. - Query query = con.query(); - query << "DROP TABLE IF EXISTS test_table;" << endl << - "CREATE TABLE test_table(id INT);" << endl << - "INSERT INTO test_table VALUES(10);" << endl << - "UPDATE test_table SET id=20 WHERE id=10;" << endl << - "SELECT * FROM test_table;" << endl << - "DROP TABLE test_table" << endl; - cout << "Multi-query: " << endl << query.preview() << endl; - - // Execute statement and display all result sets. - print_multiple_results(query); - -#if MYSQL_VERSION_ID >= 50000 - // If it's MySQL v5.0 or higher, also test stored procedures, which - // return their results the same way multi-queries do. - query.reset(); - query << "DROP PROCEDURE IF EXISTS get_stock;" << endl << - "CREATE PROCEDURE get_stock" << endl << - "( i_item varchar(20) )" << endl << - "BEGIN" << endl << - "SET i_item = concat('%', i_item, '%');" << endl << - "SELECT * FROM stock WHERE lower(item) like lower(i_item);" << endl << - "END" << endl << - ";"; - cout << "Stored procedure query: " << endl << query.preview() << endl; - - // Create the stored procedure. - print_multiple_results(query); - - // Call the stored procedure and display its results. - query.reset(); - query << "CALL get_stock('relish')"; - cout << "Query: " << query.preview() << endl; - print_multiple_results(query); -#endif - - return 0; -} ADDED examples/resetdb.cc Index: examples/resetdb.cc ================================================================== --- /dev/null +++ examples/resetdb.cc @@ -0,0 +1,79 @@ + +#include +#include + +int main (int argc, char *argv[]) { + Connection connection(use_exceptions); + try { // the entire main block is one big try block; + + if (argc == 1) connection.connect(""); + else if (argc == 2) connection.connect("",argv[1]); + else if (argc == 3) connection.connect("",argv[1],argv[2]); + else if (argc <= 4) connection.connect("",argv[1],argv[2],argv[3]); + // create a new object and connect based on any (if any) arguments + // passed to main(); + + try { + connection.select_db("mysql_cpp_data"); + } catch (BadQuery er) { + // if it couldn't connect to the database assume that it doesn't exist + // and try created it. If that does not work exit with an error. + connection.create_db("mysql_cpp_data"); + connection.select_db("mysql_cpp_data"); + } + + Query query = connection.query(); // create a new query object + + try { // ignore any errors here + // I hope to make this simpler soon + query.execute("drop table stock"); + } catch (BadQuery er) {} + + query << "create table stock (item char(20) not null, num smallint," + << "weight double, price double, sdate date)"; + query.execute(RESET_QUERY); + // send the query to create the table and execute it. The + // RESET_QUERY tells the query object to reset it self after + // execution + + query << "insert into %5:table values (%0q, %1q, %2, %3, %4q)"; + query.parse(); + // set up the template query I will use to insert the data. The + // parse method call is important as it is what lets the query + // know that this is a template and not a literal string + + query.def["table"] = "stock"; + // This is setting the parameter named table to stock. + + query.execute ("Hamburger Buns", 56, 1.25, 1.1, "1998-04-26"); + query.execute ("Hotdogs' Buns" ,65, 1.1 , 1.1, "1998-04-23"); + query.execute ("Dinner Roles" , 75, .95, .97, "1998-05-25"); + query.execute ("White Bread" , 87, 1.5, 1.75, "1998-09-04"); + // The last parameter "table" is not specified here. Thus + // the default value for "table" is used which is "stock". + + } catch (BadQuery er) { // handle any errors that may come up + cerr << "Error: " << er.error << endl; + return -1; + } +} + + + + + + + + + + + + + + + + + + + + DELETED examples/resetdb.cpp Index: examples/resetdb.cpp ================================================================== --- examples/resetdb.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/*********************************************************************** - resetdb.cpp - (Re)initializes the example database, mysql_cpp_data. - You must run this at least once before running most of the other - examples, and it is helpful sometimes to run it again, as some of - the examples modify the table in this database. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include - -using namespace std; - -// Convert a packed version number in the format used within MySQL++ -// to a printable string. -static string -version_str(int packed) -{ - char buf[9]; - snprintf(buf, sizeof(buf), "%d.%d.%d", - (packed & 0xFF0000) >> 16, - (packed & 0x00FF00) >> 8, - (packed & 0x0000FF)); - return buf; -} - - -int -main(int argc, char *argv[]) -{ - // Ensure that we're not mixing library and header file versions. - // This is really easy to do if you have MySQL++ on your system and - // are trying to build a new version, and run the examples directly - // instead of through exrun. - if (mysqlpp::get_library_version() != MYSQLPP_HEADER_VERSION) { - cerr << "Version mismatch: library is v" << - version_str(mysqlpp::get_library_version()) << - ", headers are v" << - version_str(MYSQLPP_HEADER_VERSION) << - ". Are you running this" << endl << - "with exrun? See README.examples." << endl; - return 1; - } - - // Connect to database server - mysqlpp::Connection con; - try { - cout << "Connecting to database server..." << endl; - if (!connect_to_db(argc, argv, con, "")) { - return 1; - } - } - catch (exception& er) { - cerr << "Connection failed: " << er.what() << endl; - return 1; - } - - // Create new sample database, or re-create it. We suppress - // exceptions, because it's not an error if DB doesn't yet exist. - bool new_db = false; - { - mysqlpp::NoExceptions ne(con); - mysqlpp::Query query = con.query(); - if (con.select_db(kpcSampleDatabase)) { - // Toss old table, if it exists. If it doesn't, we don't - // really care, as it'll get created next. - cout << "Dropping existing sample data tables..." << endl; - query.execute("drop table stock"); - query.execute("drop table images"); - } - else { - // Database doesn't exist yet, so create and select it. - if (con.create_db(kpcSampleDatabase) && - con.select_db(kpcSampleDatabase)) { - new_db = true; - } - else { - cerr << "Error creating DB: " << con.error() << endl; - return 1; - } - } - } - - // Create sample data table within sample database. - try { - // Send the query to create the stock table and execute it. - cout << "Creating stock table..." << endl; - mysqlpp::Query query = con.query(); - query << - "CREATE TABLE stock (" << - " item CHAR(20) NOT NULL, " << - " num BIGINT, " << - " weight DOUBLE, " << - " price DOUBLE, " << - " sdate DATE) " << - "ENGINE = InnoDB " << - "CHARACTER SET utf8 COLLATE utf8_general_ci"; - query.execute(); - - // Set up the template query to insert the data. The parse() - // call tells the query object that this is a template and - // not a literal query string. - query << "insert into %5:table values (%0q, %1q, %2, %3, %4q)"; - query.parse(); - - // Set the template query parameter "table" to "stock". - query.def["table"] = "stock"; - - // Notice that we don't give a sixth parameter in these calls, - // so the default value of "stock" is used. Also notice that - // the first row is a UTF-8 encoded Unicode string! All you - // have to do to store Unicode data in recent versions of MySQL - // is use UTF-8 encoding. - cout << "Populating stock table..." << endl; - query.execute("Nürnberger Brats", 97, 1.5, 8.79, "2005-03-10"); - query.execute("Pickle Relish", 87, 1.5, 1.75, "1998-09-04"); - query.execute("Hot Mustard", 73, .95, .97, "1998-05-25"); - query.execute("Hotdog Buns", 65, 1.1, 1.1, "1998-04-23"); - - // Now create empty images table, for testing BLOB and auto- - // increment column features. - cout << "Creating empty images table..." << endl; - query.reset(); - query << - "CREATE TABLE images (" << - " id INT UNSIGNED NOT NULL AUTO_INCREMENT, " << - " data BLOB, " << - " PRIMARY KEY (id)" << - ")"; - query.execute(); - - // Report success - cout << (new_db ? "Created" : "Reinitialized") << - " sample database successfully." << endl; - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return 1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return 1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return 1; - } - - return 0; -} ADDED examples/simple1.cc Index: examples/simple1.cc ================================================================== --- /dev/null +++ examples/simple1.cc @@ -0,0 +1,51 @@ +#include +#include +#include + +int main() { + Connection con("mysql_cpp_data"); + // The full format for the Connection constructor is + // Connection(cchar *db, cchar *host="", + // cchar *user="", cchar *passwd="") + // You may need to specify some of them if the database is not on + // the local machine or you database username is not the same as your + // login name, etc.. + + Query query = con.query(); + // This creates a query object that is bound to con. + + query << "select * from stock"; + // You can write to the query object like you would any other ostrem + + Result res = query.store(); + // Query::store() executes the query and returns the results + + cout << "Query: " << query.preview() << endl; + // Query::preview() simply returns a string with the current query + // string in it. + + cout << "Records Found: " << res.size() << endl << endl; + + Row row; + cout.setf(ios::left); + cout << setw(17) << "Item" + << setw(4) << "Num" + << setw(7) << "Weight" + << setw(7) << "Price" + << "Date" << endl + << endl; + + Result::iterator i; + // The Result class has a read-only Random Access Iterator + for (i = res.begin(); i != res.end(); i++) { + row = *i; + cout << setw(17) << row[0] + << setw(4) << row[1] + << setw(7) << row["weight"] + // you can use either the index number or column name when + // retrieving the colume data as demonstrated above. + << setw(7) << row[3] + << row[4] << endl; + } + return 0; +} DELETED examples/simple1.cpp Index: examples/simple1.cpp ================================================================== --- examples/simple1.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/*********************************************************************** - simple1.cpp - Example showing the simplest way to get data from a MySQL - table with MySQL++. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - // Connect to the sample database. - mysqlpp::Connection con(false); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Retrieve a subset of the sample stock table set up by resetdb - mysqlpp::Query query = con.query(); - query << "select item from stock"; - mysqlpp::Result res = query.store(); - - // Display the result set - cout << "We have:" << endl; - if (res) { - mysqlpp::Row row; - mysqlpp::Row::size_type i; - for (i = 0; row = res.at(i); ++i) { - cout << '\t' << row.at(0) << endl; - } - } - else { - cerr << "Failed to get item list: " << query.error() << endl; - return 1; - } - - return 0; -} DELETED examples/simple2.cpp Index: examples/simple2.cpp ================================================================== --- examples/simple2.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/*********************************************************************** - simple2.cpp - Retrieves the entire contents of the sample stock table - using a "store" query, and prints it out. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - // Connect to the sample database. - mysqlpp::Connection con(false); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Retrieve the sample stock table set up by resetdb - mysqlpp::Query query = con.query(); - query << "select * from stock"; - mysqlpp::Result res = query.store(); - - // Display results - if (res) { - // Display header - cout.setf(ios::left); - cout << setw(21) << "Item" << - setw(10) << "Num" << - setw(10) << "Weight" << - setw(10) << "Price" << - "Date" << endl << endl; - - // Get each row in result set, and print its contents - mysqlpp::Row row; - mysqlpp::Row::size_type i; - for (i = 0; row = res.at(i); ++i) { - cout << setw(20) << row["item"] << ' ' << - setw(9) << row["num"] << ' ' << - setw(9) << row["weight"] << ' ' << - setw(9) << row["price"] << ' ' << - setw(9) << row["sdate"] << - endl; - } - } - else { - cerr << "Failed to get stock table: " << query.error() << endl; - return 1; - } - - return 0; -} DELETED examples/simple3.cpp Index: examples/simple3.cpp ================================================================== --- examples/simple3.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/*********************************************************************** - simple3.cpp - Example showing how to use the 'use' method of retrieving - a table, as opposed to the more common 'store' method illustrated - by the simple2 example. - - Copyright (c) 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - // Connect to the sample database. - mysqlpp::Connection con(false); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Ask for all rows from the sample stock table set up by resetdb. - // Unlike simple2 example, we don't store result set in memory. - mysqlpp::Query query = con.query(); - query << "select * from stock"; - mysqlpp::ResUse res = query.use(); - - // Retreive result rows one by one, and display them. - if (res) { - // Display header - cout.setf(ios::left); - cout << setw(21) << "Item" << - setw(10) << "Num" << - setw(10) << "Weight" << - setw(10) << "Price" << - "Date" << endl << endl; - - // Get each row in result set, and print its contents - mysqlpp::Row row; - while (row = res.fetch_row()) { - cout << setw(20) << row["item"] << ' ' << - setw(9) << row["num"] << ' ' << - setw(9) << row["weight"] << ' ' << - setw(9) << row["price"] << ' ' << - setw(9) << row["sdate"] << - endl; - } - - return 0; - } - else { - cerr << "Failed to get stock item: " << query.error() << endl; - return 1; - } -} ADDED examples/sinisa_ex.cc Index: examples/sinisa_ex.cc ================================================================== --- /dev/null +++ examples/sinisa_ex.cc @@ -0,0 +1,96 @@ +#include +#include +vector yy; +#include +#include +#include + +int main() { + Connection con(use_exceptions); + try { + con.real_connect ("","localhost","root","",3306,(int)0,60,NULL); + + cout << con.clinet_info() << endl << endl; + Query query = con.query(); + + query << "show databases"; + + Result res = query.store(); + + cout << "Query: " << query.preview() << endl; + + cout << "Records Found: " << res.size() << endl << endl; + + Row row; + cout.setf(ios::left); + cout << setw(17) << "Databases" << endl << endl; + + Result::iterator i; + for (i = res.begin(); i != res.end(); i++) { + row = *i; + cout << setw(17) << row[0] << endl; + } + char database [] = "mysql"; + con.select_db (database); + + query << "show tables"; + + res = query.store(); + + cout << "Query: " << query.preview() << endl; + + cout << "Records Found: " << res.size() << endl << endl; + + cout.setf(ios::left); + cout << setw(17) << "Tables" << endl << endl; + + for (i = res.begin(); i != res.end(); i++) { + row = *i; + string xx(row[0]); + cout << setw(17) << row[0] << endl; + yy.insert(yy.end(),xx); + } + for (unsigned int j = 0; j < yy.size();j++) { + query << "describe " << yy[j] << ""; + cout << query.preview() << endl << endl; + res = query.store(); + unsigned int columns = res.num_fields(), counter; + cout << setw(15) << endl; + for (counter = 0; counter < columns; counter++) { + cout << setw(15) << res.names(counter) << " "; + } + cout << endl << endl; + for (i = res.begin(); i!=res.end();i++) { + row = *i; + for (counter = 0; counter < columns; counter++) { + cout << row[counter] << " "; + } + cout << endl; + } + } + query << "select * from user"; + res = query.store(); int columns = res.num_fields(); + cout << query.preview() << endl << endl; + cout << "fields = " << res.num_fields() << "rows = " << res.size() << endl; + for (i = res.begin(); i!=res.end();i++) { + row = *i; + for (int counter = 0; counter < columns; counter++) { + cout << row[counter] << " "; + } + cout << endl; + } + } catch (BadQuery er){ // handle any connection + // or query errors that may come up + cerr << "Error: " << er.error << " " << con.errnum() << endl; + return -1; + + } catch (BadConversion er) { + // we still need to cache bad conversions incase something goes + // wrong when the data is converted into stock + cerr << "Error: Tried to convert \"" << er.data << "\" to a \"" + << er.type_name << "\"." << endl; + return -1; + } + +} + DELETED examples/stock.h Index: examples/stock.h ================================================================== --- examples/stock.h +++ /dev/null @@ -1,48 +0,0 @@ -/*********************************************************************** - stock.h - Declares the stock SSQLS used by several of the examples. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -#include - -#include - -// The following is calling a very complex macro which will create -// "struct stock", which has the member variables: -// -// sql_char item; -// ... -// sql_date sdate; -// -// plus methods to help populate the class from a MySQL row. See the -// SSQLS sections in the user manual for further details. -sql_create_5(stock, - 1, 5, // The meaning of these values is covered in the user manual - mysqlpp::sql_char, item, - mysqlpp::sql_bigint, num, - mysqlpp::sql_double, weight, - mysqlpp::sql_double, price, - mysqlpp::sql_date, sdate) - DELETED examples/store_if.cpp Index: examples/store_if.cpp ================================================================== --- examples/store_if.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/*********************************************************************** - store_if.cpp - Demonstrates Query::store_if(), showing only the rows - from the sample table with prime quantities. This isn't intended - to be useful, only to show how you can do result set filtering that - outstrips the power of SQL. - - Copyright (c) 2005-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" -#include "stock.h" - -#include - -#include - -#include - - -// Define a functor for testing primality. -struct is_prime -{ - bool operator()(const stock& s) - { - if ((s.num == 2) || (s.num == 3)) { - return true; // 2 and 3 are trivial cases - } - else if ((s.num < 2) || ((s.num % 2) == 0)) { - return false; // can't be prime if < 2 or even - } - else { - // The only possibility left is that it's divisible by an - // odd number that's less or equal to its square root. - for (int i = 3; i <= sqrt(double(s.num)); i += 2) { - if ((s.num % i) == 0) { - return false; - } - } - return true; - } - } -}; - - -int -main(int argc, char *argv[]) -{ - try { - // Connect to the sample database - mysqlpp::Connection con; - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Collect the stock items with prime quantities - std::vector results; - mysqlpp::Query query = con.query(); - query.store_if(results, stock(), is_prime()); - - // Show the results - print_stock_header(results.size()); - std::vector::const_iterator it; - for (it = results.begin(); it != results.end(); ++it) { - print_stock_row(it->item.c_str(), it->num, it->weight, - it->price, it->sdate); - } - } - catch (const mysqlpp::BadQuery& e) { - // Something went wrong with the SQL query. - std::cerr << "Query failed: " << e.what() << std::endl; - return 1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - std::cerr << "Error: " << er.what() << std::endl; - return 1; - } - - return 0; -} DELETED examples/tquery.cpp Index: examples/tquery.cpp ================================================================== --- examples/tquery.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/*********************************************************************** - tquery.cpp - Example similar to custom3.cpp, except that it uses - template queries instead of SSQLS. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Build a template query to retrieve a stock item given by - // item name. - mysqlpp::Query query = con.query(); - query << "select * from stock where item = %0q"; - query.parse(); - - // Retrieve an item added by resetdb; it won't be there if - // tquery or custom3 is run since resetdb. - mysqlpp::Result res1 = query.store("Nürnberger Brats"); - if (res1.empty()) { - throw mysqlpp::BadQuery("UTF-8 bratwurst item not found in " - "table, run resetdb"); - } - - // Replace the proper German name with a 7-bit ASCII - // approximation using a different template query. - query.reset(); - query << "update stock set item = %0q where item = %1q"; - query.parse(); - mysqlpp::ResNSel res2 = query.execute("Nuerenberger Bratwurst", - res1.at(0).at(0).c_str()); - - // Print the new table contents. - print_stock_table(query); - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED examples/usequery.cpp Index: examples/usequery.cpp ================================================================== --- examples/usequery.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/*********************************************************************** - usequery.cpp - Same as simple3 example, only with exceptions enabled. - The end of the result set is signalled differently in this case. - - Copyright (c) 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include - -#include - -int -main(int argc, char *argv[]) -{ - try { - // Connect to the sample database - mysqlpp::Connection con; - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Build query to retrieve the entire stock table - mysqlpp::Query query = con.query(); - query << "select * from stock"; - - // Execute the query, but don't save results in memory - mysqlpp::ResUse res = query.use(); - if (!res) { - std::cerr << "Result set is empty!" << std::endl; - return 1; - } - - // Iterate through result set, printing each row. - mysqlpp::Row r; - while (r = res.fetch_row()) { - print_stock_row(r); - } - } - catch (const mysqlpp::BadQuery& e) { - // Something went wrong with the SQL query. - std::cerr << "Query failed: " << e.what() << std::endl; - return 1; - } - catch (const mysqlpp::EndOfResults&) { - // Last query result received. Exit normally. - return 0; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - std::cerr << "Error: " << er.what() << std::endl; - return 1; - } - - // Shouldn't happen! Program should either error out through one of - // the "return 1" cases above, or successfully walk off the end of - // the result set and go through the EndOfResults path above. - return 2; -} ADDED examples/util.cc Index: examples/util.cc ================================================================== --- /dev/null +++ examples/util.cc @@ -0,0 +1,40 @@ +#include +#include +#include "util.hh" + +void print_stock_table(Query& query) { + query.reset(); + query << "select * from stock"; + // You can write to the query object like you would any other ostrem + + Result res = query.store(); + // Query::store() executes the query and returns the results + + cout << "Query: " << query.preview() << endl; + // Query::preview() simply returns a string with the current query + // string in it. + + cout << "Records Found: " << res.size() << endl << endl; + + Row row; + cout.setf(ios::left); + cout << setw(17) << "Item" + << setw(4) << "Num" + << setw(7) << "Weight" + << setw(7) << "Price" + << "Date" << endl + << endl; + + Result::iterator i; + // The Result class has a read-only Random Access Iterator + for (i = res.begin(); i != res.end(); i++) { + row = *i; + cout << setw(17) << row[0] + << setw(4) << row[1] + << setw(7) << row["weight"] + // you can use either the index number or column name when + // retrieving the colume data as demonstrated above. + << setw(7) << row[3] + << row[4] << endl; + } +} DELETED examples/util.cpp Index: examples/util.cpp ================================================================== --- examples/util.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/*********************************************************************** - util.cpp - Utility functions required by several of the example - programs. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "util.h" - -#include -#include - -// This include isn't actually needed here. It's just a test of the -// feature added in v2.1 allowing an SSQLS to be defined in multiple -// modules without having a multiply-defined static variable error. -// The test is disabled for VC++ 2003, which doesn't support the -// feature. -#if !defined(_MSC_VER) || _MSC_VER >= 1400 -# define MYSQLPP_SSQLS_NO_STATICS -# include "stock.h" -#endif - -using namespace std; - -const char* kpcSampleDatabase = "mysql_cpp_data"; - - -//// print_stock_header //////////////////////////////////////////////// -// Display a header suitable for use with print_stock_rows(). - -void -print_stock_header(int rows) -{ - cout << "Records found: " << rows << endl << endl; - cout.setf(ios::left); - cout << setw(21) << "Item" << - setw(10) << "Num" << - setw(10) << "Weight" << - setw(10) << "Price" << - "Date" << endl << endl; -} - - -//// print_stock_row /////////////////////////////////////////////////// -// Print out a row of data from the stock table, in a format compatible -// with the header printed out in the previous function. - -void -print_stock_row(const mysqlpp::sql_char& item, mysqlpp::sql_bigint num, - mysqlpp::sql_double weight, mysqlpp::sql_double price, - const mysqlpp::sql_date& date) -{ - char buf[100]; - cout << setw(20) << item << ' ' << - setw(9) << num << ' ' << - setw(9) << weight << ' ' << - setw(9) << price << ' ' << - date << endl; -} - - -//// print_stock_row /////////////////////////////////////////////////// -// Take a Row from the example 'stock' table, break it up into fields, -// and call the above version of this function. - -void -print_stock_row(const mysqlpp::Row& row) -{ - // The brief code below illustrates several aspects of the library - // worth noting: - // - // 1. You can subscript a row by integer (position of the field in - // the row) or by string (name of field in the row). The former is - // more efficient, while the latter trades some efficiency for - // robustness in the face of schema changes. (Consider using SSQLS - // if you need a tradeoff in between these two positions.) - // - // 2. You can also get at a row's field's with Row::at(), which is - // much like Row::operator[](int). Besides the syntax difference, - // the only practical difference is that only at() can access field - // 0: this is because '0' can be converted to both int and to const - // char*, so the compiler rightly complains that it can't decide - // which overload to call. - // - // 3. Notice that we make an explicit temporary copy of the first - // field, which is the only string field. We must tolerate the - // inefficiency of this copy, because Row::operator[] returns a - // ColData object, which goes away after it is converted to some - // other form. So, while we could have made print_stock_row() - // take a const char* argument (as past versions mistakenly did!) - // this would result in a dangling pointer, since it points into the - // ColData object, which is dead by the time the pointer is - // evaluated in print_stock_row(). It will probably even work this - // way, but like any memory bug, it can wreak subtle havoc. - std::string item(row.at(0)); - print_stock_row(item, row["num"], row[2], row[3], row[4]); -} - - -//// print_stock_rows ////////////////////////////////////////////////// -// Print out a number of rows from the example 'stock' table. - -void -print_stock_rows(mysqlpp::Result& res) -{ - print_stock_header(res.size()); - - // Use the Result class's read-only random access iterator to walk - // through the query results. - mysqlpp::Result::iterator i; - for (i = res.begin(); i != res.end(); ++i) { - // Notice that a dereferenced result iterator can be converted - // to a Row object, which makes for easier element access. - print_stock_row(*i); - } -} - - -//// get_stock_table /////////////////////////////////////////////////// -// Retreive the entire contents of the example 'stock' table. - -void -get_stock_table(mysqlpp::Query& query, mysqlpp::Result& res) -{ - // Reset the query object, in case we're re-using it. - query.reset(); - - // You can write to the query object like you would any ostream. - query << "select * from stock"; - - // Show the query string. If you call preview(), it must be before - // you call execute() or store() or use(). - cout << "Query: " << query.preview() << endl; - - // Execute the query, storing the results in memory. - res = query.store(); -} - - -//// print_stock_table ///////////////////////////////////////////////// -// Simply retrieve and print the entire contents of the stock table. - -void -print_stock_table(mysqlpp::Query& query) -{ - mysqlpp::Result res; - get_stock_table(query, res); - print_stock_rows(res); -} - - -//// print_usage /////////////////////////////////////////////////////// -// Show the program's usage message - -void -print_usage(const char* program_name, const char* extra_parms) -{ - cout << "usage: " << program_name << - " [host [user [password [port]]]] " << extra_parms << endl; - cout << endl; - cout << " If no arguments are given, connects to database " - "server on localhost" << endl; - cout << " using your user name and no password. You may give " - "any number of" << endl; - cout << " these arguments, but they must be in the order " - "listed, and you" << endl; - cout << " cannot skip preceding arguments." << endl; - if (strlen(extra_parms) > 0) { - cout << endl; - cout << " The extra parameter " << extra_parms << - " is required, regardless of which" << endl; - cout << " other arguments you pass." << endl; - } - cout << endl; -} - - -//// connect_to_db ///////////////////////////////////////////////////// -// Establishes a connection to a MySQL database server, optionally -// attaching to database kdb. This is basically a command-line parser -// for the examples, since the example programs' arguments give us the -// information we need to establish the server connection. - -bool -connect_to_db(int argc, char *argv[], mysqlpp::Connection& con, - const char *kdb) -{ - if (argc < 1) { - cerr << "Bad argument count: " << argc << '!' << endl; - return false; - } - - if (!kdb) { - kdb = kpcSampleDatabase; - } - - if ((argc > 1) && (argv[1][0] == '-')) { - print_usage(argv[0]); - return false; - } - - if (argc == 1) { - con.connect(kdb); - } - else if (argc == 2) { - con.connect(kdb, argv[1]); - } - else if (argc == 3) { - con.connect(kdb, argv[1], argv[2]); - } - else if (argc == 4) { - con.connect(kdb, argv[1], argv[2], argv[3]); - } - else if (argc >= 5) { - con.connect(kdb, argv[1], argv[2], argv[3], atoi(argv[4])); - } - - if (con) { - return true; - } - else { - cerr << "Database connection failed: " << con.error() << endl; - return false; - } -} DELETED examples/util.h Index: examples/util.h ================================================================== --- examples/util.h +++ /dev/null @@ -1,49 +0,0 @@ -/*********************************************************************** - util.h - Declares functions and such required by several of the - example programs. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#if !defined(MYSQLPP_UTIL_H) -#define MYSQLPP_UTIL_H - -#include - -extern const char* kpcSampleDatabase; - -void print_stock_header(int rows); -void print_stock_row(const mysqlpp::Row& r); -void print_stock_row(const mysqlpp::sql_char& item, - mysqlpp::sql_bigint num, mysqlpp::sql_double weight, - mysqlpp::sql_double price, const mysqlpp::sql_date& date); -void print_stock_rows(mysqlpp::Result& res); -void print_stock_table(mysqlpp::Query& query); -void get_stock_table(mysqlpp::Query& query, mysqlpp::Result& res); -void print_usage(const char* program_name, - const char* extra_parms = ""); -bool connect_to_db(int argc, char *argv[], mysqlpp::Connection& con, - const char* kdb = 0); - -#endif // !defined(MYSQLPP_UTIL_H) - ADDED examples/util.hh Index: examples/util.hh ================================================================== --- /dev/null +++ examples/util.hh @@ -0,0 +1,8 @@ +#ifndef _util_hh_ +#define _util_hh_ + +#include + +void print_stock_table(Query& query); + +#endif DELETED examples/vstudio/mfc/mfc.cpp Index: examples/vstudio/mfc/mfc.cpp ================================================================== --- examples/vstudio/mfc/mfc.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/*********************************************************************** - mfc.cpp - Skeletal main module of the MySQL++ MFC example program. - Nothing interesting to see here. Move along to mfc_dlg.cpp, folks. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 "stdafx.h" -#include "mfc.h" -#include "mfc_dlg.h" - -CApp gApplication; - -BOOL CApp::InitInstance() -{ - // Set up Windows commomn controls - INITCOMMONCONTROLSEX InitCtrls; - InitCtrls.dwSize = sizeof(InitCtrls); - InitCtrls.dwICC = ICC_WIN95_CLASSES; - InitCommonControlsEx(&InitCtrls); - - CWinApp::InitInstance(); - - // Initialize Winsock for MySQL communication, start GUI - if (AfxSocketInit()) { - CExampleDlg dlg; - m_pMainWnd = &dlg; - dlg.DoModal(); - } - else { - AfxMessageBox(IDP_SOCKETS_INIT_FAILED); - } - - return FALSE; -} DELETED examples/vstudio/mfc/mfc.h Index: examples/vstudio/mfc/mfc.h ================================================================== --- examples/vstudio/mfc/mfc.h +++ /dev/null @@ -1,34 +0,0 @@ -/*********************************************************************** - mfc.cpp - Declares the MFC application object. Nothing interesting to - see here. Move along to mfc_dlg.cpp, folks. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 -***********************************************************************/ - -#pragma once - -class CApp : public CWinApp -{ -public: - CApp() { } - virtual BOOL InitInstance(); -}; DELETED examples/vstudio/mfc/mfc.rc Index: examples/vstudio/mfc/mfc.rc ================================================================== --- examples/vstudio/mfc/mfc.rc +++ /dev/null @@ -1,135 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "afxres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""afxres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "#define _AFX_NO_SPLITTER_RESOURCES\r\n" - "#define _AFX_NO_OLE_RESOURCES\r\n" - "#define _AFX_NO_TRACKER_RESOURCES\r\n" - "#define _AFX_NO_PROPERTY_RESOURCES\r\n" - "\r\n" - "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" - "LANGUAGE 9, 1\r\n" - "#pragma code_page(1252)\r\n" - "#include ""afxres.rc"" // Standard components\r\n" - "#endif\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_MFC_DIALOG DIALOGEX 0, 0, 210, 105 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION -EXSTYLE WS_EX_APPWINDOW -CAPTION "MySQL++ MFC Example" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - EDITTEXT IDC_SERVER_EDIT,51,7,94,14,ES_AUTOHSCROLL - EDITTEXT IDC_USER_EDIT,51,24,94,14,ES_AUTOHSCROLL - EDITTEXT IDC_PASSWORD_EDIT,51,41,94,14,ES_PASSWORD | ES_AUTOHSCROLL - DEFPUSHBUTTON "Connect!",IDC_CONNECT_BUTTON,153,7,50,14 - PUSHBUTTON "Close",IDCANCEL,153,25,50,16 - LISTBOX IDC_RESULTS_LIST,51,58,94,40,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_DISABLED | WS_VSCROLL - RTEXT "Server:",IDC_STATIC,7,7,40,8 - RTEXT "User name:",IDC_STATIC,7,24,40,8 - RTEXT "Password:",IDC_STATIC,7,41,40,8 - RTEXT "Results:",IDC_STATIC,7,58,40,8 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_MFC_DIALOG, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 203 - TOPMARGIN, 7 - BOTTOMMARGIN, 98 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed." -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// -#define _AFX_NO_SPLITTER_RESOURCES -#define _AFX_NO_OLE_RESOURCES -#define _AFX_NO_TRACKER_RESOURCES -#define _AFX_NO_PROPERTY_RESOURCES - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE 9, 1 -#pragma code_page(1252) -#include "afxres.rc" // Standard components -#endif - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - DELETED examples/vstudio/mfc/mfc_dlg.cpp Index: examples/vstudio/mfc/mfc_dlg.cpp ================================================================== --- examples/vstudio/mfc/mfc_dlg.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/*********************************************************************** - mfc_dlg.cpp - Defines the dialog box behavior for the MySQL++ MFC - example. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 "stdafx.h" -#include "mfc_dlg.h" - -#include - -BEGIN_MESSAGE_MAP(CExampleDlg, CDialog) - ON_BN_CLICKED(IDC_CONNECT_BUTTON, &CExampleDlg::OnBnClickedConnectButton) -END_MESSAGE_MAP() - - -//// ctor ////////////////////////////////////////////////////////////// - -CExampleDlg::CExampleDlg(CWnd* pParent) : -CDialog(IDD_MFC_DIALOG, pParent) -{ - LoadDefaults(); -} - - -//// AddMessage //////////////////////////////////////////////////////// -// Inserts the given string at the end of the list box we're using for -// output to the user. - -void -CExampleDlg::AddMessage(LPCTSTR pcMessage) -{ - ResultsList.InsertString(-1, pcMessage); -} - - -//// DoDataExchange //////////////////////////////////////////////////// -// Transfer data from the controls into our member variables - -void -CExampleDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); - DDX_Text(pDX, IDC_SERVER_EDIT, sServerAddress); - DDX_Text(pDX, IDC_USER_EDIT, sUserName); - DDX_Text(pDX, IDC_PASSWORD_EDIT, sPassword); - DDX_Control(pDX, IDC_RESULTS_LIST, ResultsList); -} - - -//// LoadDefaults ////////////////////////////////////////////////////// -// Load default input values from registry, if they exist. - -void -CExampleDlg::LoadDefaults() -{ - HKEY key = OpenSettingsRegistryKey(); - if (key) { - TCHAR acSetting[100]; - if (LoadSetting(key, _T("user"), acSetting, sizeof(acSetting))) { - sUserName = acSetting; - } - if (LoadSetting(key, _T("server"), acSetting, sizeof(acSetting))) { - sServerAddress = acSetting; - } - RegCloseKey(key); - } - - if (sUserName.IsEmpty()) { - TCHAR acUserName[100]; - DWORD nBufferSize = sizeof(acUserName); - if (GetUserName(acUserName, &nBufferSize)) { - sUserName = acUserName; - } - } - if (sServerAddress.IsEmpty()) { - sServerAddress = _T("localhost"); - } -} - - -//// LoadSetting /////////////////////////////////////////////////////// -// Loads up the value of the named registry value underneath the given -// key and returns it in pcValue. - -bool -CExampleDlg::LoadSetting(HKEY key, LPCTSTR pcName, LPTSTR pcValue, - DWORD nValueSize) -{ - return RegQueryValueEx(key, pcName, 0, 0, LPBYTE(pcValue), - &nValueSize) == ERROR_SUCCESS; -} - - -//// OnBnClickedConnectButton ////////////////////////////////////////// -// This is essentially the same thing as examples/simple1.cpp - -void -CExampleDlg::OnBnClickedConnectButton() -{ - WCHAR awcTempBuf[100]; - const int kTempBufSize = sizeof(awcTempBuf) / sizeof(awcTempBuf[0]); - - // Pull user input into our member variables - UpdateData(TRUE); - - // Clear out the results list, in case this isn't the first time - // we've come in here. - ResultsList.ResetContent(); - - // Translate the Unicode text we get from the UI into the UTF-8 form - // that MySQL wants. - const int kInputBufSize = 100; - char acServerAddress[kInputBufSize]; - char acUserName[kInputBufSize]; - char acPassword[kInputBufSize]; - ToUTF8(acServerAddress, kInputBufSize, sServerAddress); - ToUTF8(acUserName, kInputBufSize, sUserName); - ToUTF8(acPassword, kInputBufSize, sPassword); - - // Connect to the sample database. - mysqlpp::Connection con(false); - if (!con.connect("mysql_cpp_data", acServerAddress, acUserName, - acPassword)) { - AddMessage(_T("Failed to connect to server:")); - if (ToUCS2(awcTempBuf, kTempBufSize, con.error())) { - AddMessage(awcTempBuf); - } - return; - } - - // Retrieve a subset of the sample stock table set up by resetdb - mysqlpp::Query query = con.query(); - query << "select item from stock"; - mysqlpp::Result res = query.store(); - - if (res) { - // Display the result set - mysqlpp::Row row; - for (mysqlpp::Row::size_type i = 0; row = res.at(i); ++i) { - if (ToUCS2(awcTempBuf, kTempBufSize, row.at(0))) { - AddMessage(awcTempBuf); - } - } - - // Retreive was successful, so save user inputs now - SaveInputs(); - } - else { - // Retreive failed - AddMessage(_T("Failed to get item list:")); - if (ToUCS2(awcTempBuf, kTempBufSize, query.error().c_str())) { - AddMessage(awcTempBuf); - } - } -} - - -//// OpenSettingsRegistryKey /////////////////////////////////////////// - -HKEY -CExampleDlg::OpenSettingsRegistryKey() -{ - HKEY key1, key2; - if ((RegOpenKey(HKEY_CURRENT_USER, _T("Software"), &key1) == - ERROR_SUCCESS) && (RegCreateKey(key1, - _T("MySQL++ Examples"), &key2) == ERROR_SUCCESS)) { - RegCloseKey(key1); - return key2; - } - else { - return 0; - } -} - - -//// SaveInputs //////////////////////////////////////////////////////// -// Saves the input fields' values to the registry, except for the -// password field. - -bool -CExampleDlg::SaveInputs() -{ - HKEY key = OpenSettingsRegistryKey(); - if (key) { - SaveSetting(key, _T("user"), sUserName); - SaveSetting(key, _T("server"), sServerAddress); - RegCloseKey(key); - return true; - } - else { - return false; - } -} - - -//// SaveSetting /////////////////////////////////////////////////////// -// Saves the given value as a named entry under the given registry key. - -bool -CExampleDlg::SaveSetting(HKEY key, LPCTSTR pcName, LPCTSTR pcValue) -{ - DWORD nBytes = DWORD(sizeof(TCHAR) * (_tcslen(pcValue) + 1)); - return RegSetValueEx(key, pcName, 0, REG_SZ, LPBYTE(pcValue), - nBytes) == ERROR_SUCCESS; -} - - -//// ToUCS2 //////////////////////////////////////////////////////////// -// Convert a C string in UTF-8 format to UCS-2 format. - -bool -CExampleDlg::ToUCS2(LPTSTR pcOut, int nOutLen, const char* kpcIn) -{ - if (strlen(kpcIn) > 0) { - // Do the conversion normally - return MultiByteToWideChar(CP_UTF8, 0, kpcIn, -1, pcOut, - nOutLen) > 0; - } - else if (nOutLen > 1) { - // Can't distinguish no bytes copied from an error, so handle - // an empty input string as a special case. - _tccpy(pcOut, _T("")); - return true; - } - else { - // Not enough room to do anything! - return false; - } -} - - -//// ToUTF8 //////////////////////////////////////////////////////////// -// Convert a UCS-2 multibyte string to the UTF-8 format required by -// MySQL, and thus MySQL++. - -bool -CExampleDlg::ToUTF8(char* pcOut, int nOutLen, LPCWSTR kpcIn) -{ - if (_tcslen(kpcIn) > 0) { - // Do the conversion normally - return WideCharToMultiByte(CP_UTF8, 0, kpcIn, -1, pcOut, - nOutLen, 0, 0) > 0; - } - else if (nOutLen > 0) { - // Can't distinguish no bytes copied from an error, so handle - // an empty input string as a special case. - *pcOut = '\0'; - return true; - } - else { - // Not enough room to do anything! - return false; - } -} DELETED examples/vstudio/mfc/mfc_dlg.h Index: examples/vstudio/mfc/mfc_dlg.h ================================================================== --- examples/vstudio/mfc/mfc_dlg.h +++ /dev/null @@ -1,58 +0,0 @@ -/*********************************************************************** - mfc_dlg.h - Declares the dialog class for the MySQL++ MFC example. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 -***********************************************************************/ - -#pragma once -#include "afxwin.h" -#include "resource.h" - -class CExampleDlg : public CDialog -{ -public: - //// Public interface - CExampleDlg(CWnd* pParent = 0); - - //// Public data - CString sServerAddress; - CString sUserName; - CString sPassword; - CListBox ResultsList; - -protected: - //// Internal support functions - void AddMessage(LPCTSTR pcMessage); - void DoDataExchange(CDataExchange* pDX); - void LoadDefaults(); - bool LoadSetting(HKEY key, LPCTSTR pcName, LPTSTR pcValue, - DWORD nValueSize); - HKEY OpenSettingsRegistryKey(); - bool SaveInputs(); - bool SaveSetting(HKEY key, LPCTSTR pcName, LPCTSTR pcValue); - bool ToUCS2(LPTSTR pcOut, int nOutLen, const char* kpcIn); - bool ToUTF8(char* pcOut, int nOutLen, LPCWSTR kpcIn); - - //// Message map - afx_msg void OnBnClickedConnectButton(); - DECLARE_MESSAGE_MAP() -}; DELETED examples/vstudio/mfc/resource.h Index: examples/vstudio/mfc/resource.h ================================================================== --- examples/vstudio/mfc/resource.h +++ /dev/null @@ -1,22 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by mfc.rc -// -#define IDD_MFC_DIALOG 102 -#define IDP_SOCKETS_INIT_FAILED 103 -#define IDC_SERVER_EDIT 1000 -#define IDC_PASSWORD_EDIT 1001 -#define IDC_USER_EDIT 1002 -#define IDC_RESULTS_LIST 1003 -#define IDC_CONNECT_BUTTON 1004 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 129 -#define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1005 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif DELETED examples/vstudio/mfc/stdafx.h Index: examples/vstudio/mfc/stdafx.h ================================================================== --- examples/vstudio/mfc/stdafx.h +++ /dev/null @@ -1,54 +0,0 @@ -/*********************************************************************** - stdafx.h - Common include file to bring in MFC support and other - basics. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 -***********************************************************************/ - -#pragma once - -#ifndef VC_EXTRALEAN -#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers -#endif - -// Modify the following defines if you have to target a platform prior to the ones specified below. -// Refer to MSDN for the latest info on corresponding values for different platforms. -#ifndef WINVER // Allow use of features specific to Windows XP or later. -#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. -#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. -#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. -#endif - -// turns off MFC's hiding of some common and often safely ignored warning messages -#define _AFX_ALL_WARNINGS - -#include // MFC core and standard components -#include // MFC extensions -#include // MFC support for Windows Common Controls -#include // MFC socket extensions - DELETED examples/vstudio/wforms/AssemblyInfo.cpp Index: examples/vstudio/wforms/AssemblyInfo.cpp ================================================================== --- examples/vstudio/wforms/AssemblyInfo.cpp +++ /dev/null @@ -1,18 +0,0 @@ -using namespace System; -using namespace System::Reflection; -using namespace System::Runtime::CompilerServices; -using namespace System::Runtime::InteropServices; -using namespace System::Security::Permissions; - -[assembly:AssemblyTitleAttribute("wforms")]; -[assembly:AssemblyDescriptionAttribute("")]; -[assembly:AssemblyConfigurationAttribute("")]; -[assembly:AssemblyCompanyAttribute("the MySQL++ project")]; -[assembly:AssemblyProductAttribute("MySQL++ Windows Forms Example")]; -[assembly:AssemblyCopyrightAttribute("Copyright © 2007 by ETR, Inc.")]; -[assembly:AssemblyTrademarkAttribute("")]; -[assembly:AssemblyCultureAttribute("")]; -[assembly:AssemblyVersionAttribute("1.0.*")]; -[assembly:ComVisible(false)]; -[assembly:CLSCompliantAttribute(true)]; -[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; DELETED examples/vstudio/wforms/MainForm.h Index: examples/vstudio/wforms/MainForm.h ================================================================== --- examples/vstudio/wforms/MainForm.h +++ /dev/null @@ -1,346 +0,0 @@ -/*********************************************************************** - MainForm.cpp - Defines the dialog box behavior for the MySQL++ C++/CLI - Windows Forms example. - - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 -***********************************************************************/ - -#pragma once - -#include - -namespace wforms { - - using namespace Microsoft::Win32; - using namespace System; - using namespace System::ComponentModel; - using namespace System::Collections; - using namespace System::Windows::Forms; - using namespace System::Data; - using namespace System::Drawing; - - public ref class MainForm : public System::Windows::Forms::Form - { - public: - MainForm() - { - InitializeComponent(); - LoadDefaults(); - } - - protected: - ~MainForm() - { - if (components) { - delete components; - } - } - - private: - // Insert a text string into the output list control - Void AddMessage(String^ msg) - { - resultsList_->Items->Add(msg); - } - - // Handle Close button click by shutting down application - Void CloseButton_Click(Object^ sender, EventArgs^ e) - { - Application::Exit(); - } - - // Handle Connect button click. The body of this function is - // essentially the same as the simple2 command line example, with - // some GUI overhead. - Void ConnectButton_Click(Object^ sender, EventArgs^ e) - { - // Clear out the results list, in case this isn't the first time - // we've come in here. - resultsList_->Items->Clear(); - - // Translate the Unicode text we get from the UI into the UTF-8 - // form that MySQL wants. - const int kInputBufSize = 100; - char acServerAddress[kInputBufSize]; - char acUserName[kInputBufSize]; - char acPassword[kInputBufSize]; - ToUTF8(acServerAddress, kInputBufSize, serverAddress_->Text); - ToUTF8(acUserName, kInputBufSize, userName_->Text); - ToUTF8(acPassword, kInputBufSize, password_->Text); - - // Connect to the sample database. - mysqlpp::Connection con(false); - if (!con.connect("mysql_cpp_data", acServerAddress, acUserName, - acPassword)) { - AddMessage("Failed to connect to server:"); - AddMessage(gcnew String(con.error())); - return; - } - - // Retrieve a subset of the sample stock table set up by resetdb - mysqlpp::Query query = con.query(); - query << "select item from stock"; - mysqlpp::Result res = query.store(); - - if (res) { - // Display the result set - mysqlpp::Row row; - for (mysqlpp::Row::size_type i = 0; row = res.at(i); ++i) { - AddMessage(ToUCS2(row.at(0))); - } - - // Retreive was successful, so save user inputs now - SaveInputs(); - } - else { - // Retreive failed - AddMessage("Failed to get item list:"); - AddMessage(ToUCS2(query.error().c_str())); - } - } - - // Load the default input field values, if there are any - Void LoadDefaults() - { - RegistryKey^ settings = OpenSettingsRegistryKey(); - if (settings) { - userName_->Text = LoadSetting(settings, L"user"); - serverAddress_->Text = LoadSetting(settings, L"server"); - } - - if (String::IsNullOrEmpty(userName_->Text)) { - userName_->Text = Environment::UserName; - } - if (String::IsNullOrEmpty(serverAddress_->Text)) { - serverAddress_->Text = L"localhost"; - } - } - - // Returns a setting from underneath the given registry key. - // Assumes that it's a string value under the MySQL++ examples' - // settings area. - String^ LoadSetting(RegistryKey^ key, String^ name) - { - return (String^)key->GetValue(name); - } - - // Returns a reference to the MySQL++ examples' settings area in the - // registry. - RegistryKey^ OpenSettingsRegistryKey() - { - RegistryKey^ key = Registry::CurrentUser->OpenSubKey(L"Software", - true); - return key ? key->CreateSubKey(L"MySQL++ Examples") : nullptr; - } - - // Saves the input fields' values to the registry, except for the - // password field. - Void SaveInputs() - { - RegistryKey^ settings = OpenSettingsRegistryKey(); - if (settings) { - SaveSetting(settings, "user", userName_->Text); - SaveSetting(settings, "server", serverAddress_->Text); - } - } - - // Saves the given value as a named entry under the given registry - // key. - Void SaveSetting(RegistryKey^ key, String^ name, String^ value) - { - key->SetValue(name, value); - } - - // Takes a string in the .NET platform's native Unicode format and - // copies it to the given C string buffer in UTF-8 encoding. - Void ToUTF8(char* pcOut, int nOutLen, String^ sIn) - { - array^ bytes = System::Text::Encoding::UTF8->GetBytes(sIn); - nOutLen = Math::Min(nOutLen - 1, bytes->Length); - System::Runtime::InteropServices::Marshal::Copy(bytes, 0, - IntPtr(pcOut), nOutLen); - pcOut[nOutLen] = '\0'; - } - - // Takes the given C string encoded in UTF-8 and converts it to a - // Unicode string in the .NET platform's native Unicode encoding. - String^ ToUCS2(const char* utf8) - { - return gcnew String(utf8, 0, strlen(utf8), - System::Text::Encoding::UTF8); - } - - private: System::Windows::Forms::TextBox^ serverAddress_; - private: System::Windows::Forms::TextBox^ password_; - private: System::Windows::Forms::TextBox^ userName_; - private: System::Windows::Forms::ListBox^ resultsList_; - private: System::Windows::Forms::Button^ connectButton_; - private: System::Windows::Forms::Button^ closeButton_; - private: System::ComponentModel::Container^ components; - -#pragma region Windows Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - void InitializeComponent(void) - { - System::Windows::Forms::Label^ label1; - System::Windows::Forms::Label^ label2; - System::Windows::Forms::Label^ label3; - System::Windows::Forms::Label^ label4; - this->serverAddress_ = (gcnew System::Windows::Forms::TextBox()); - this->password_ = (gcnew System::Windows::Forms::TextBox()); - this->userName_ = (gcnew System::Windows::Forms::TextBox()); - this->resultsList_ = (gcnew System::Windows::Forms::ListBox()); - this->connectButton_ = (gcnew System::Windows::Forms::Button()); - this->closeButton_ = (gcnew System::Windows::Forms::Button()); - label1 = (gcnew System::Windows::Forms::Label()); - label2 = (gcnew System::Windows::Forms::Label()); - label3 = (gcnew System::Windows::Forms::Label()); - label4 = (gcnew System::Windows::Forms::Label()); - this->SuspendLayout(); - // - // label1 - // - label1->AutoSize = true; - label1->Location = System::Drawing::Point(29, 13); - label1->Name = L"label1"; - label1->Size = System::Drawing::Size(41, 13); - label1->TabIndex = 6; - label1->Text = L"Server:"; - label1->TextAlign = System::Drawing::ContentAlignment::TopRight; - // - // label2 - // - label2->AutoSize = true; - label2->Location = System::Drawing::Point(9, 39); - label2->Name = L"label2"; - label2->Size = System::Drawing::Size(61, 13); - label2->TabIndex = 7; - label2->Text = L"User name:"; - label2->TextAlign = System::Drawing::ContentAlignment::TopRight; - // - // label3 - // - label3->AutoSize = true; - label3->Location = System::Drawing::Point(14, 65); - label3->Name = L"label3"; - label3->Size = System::Drawing::Size(56, 13); - label3->TabIndex = 8; - label3->Text = L"Password:"; - label3->TextAlign = System::Drawing::ContentAlignment::TopRight; - // - // label4 - // - label4->AutoSize = true; - label4->Location = System::Drawing::Point(25, 92); - label4->Name = L"label4"; - label4->Size = System::Drawing::Size(45, 13); - label4->TabIndex = 9; - label4->Text = L"Results:"; - label4->TextAlign = System::Drawing::ContentAlignment::TopRight; - // - // serverAddress_ - // - this->serverAddress_->Location = System::Drawing::Point(70, 9); - this->serverAddress_->Name = L"serverAddress_"; - this->serverAddress_->Size = System::Drawing::Size(139, 20); - this->serverAddress_->TabIndex = 0; - // - // password_ - // - this->password_->Location = System::Drawing::Point(70, 61); - this->password_->Name = L"password_"; - this->password_->Size = System::Drawing::Size(139, 20); - this->password_->TabIndex = 2; - this->password_->UseSystemPasswordChar = true; - // - // userName_ - // - this->userName_->Location = System::Drawing::Point(70, 35); - this->userName_->Name = L"userName_"; - this->userName_->Size = System::Drawing::Size(139, 20); - this->userName_->TabIndex = 1; - // - // resultsList_ - // - this->resultsList_->Enabled = false; - this->resultsList_->FormattingEnabled = true; - this->resultsList_->Location = System::Drawing::Point(70, 88); - this->resultsList_->Name = L"resultsList_"; - this->resultsList_->Size = System::Drawing::Size(228, 95); - this->resultsList_->TabIndex = 3; - this->resultsList_->TabStop = false; - // - // connectButton_ - // - this->connectButton_->Location = System::Drawing::Point(224, 9); - this->connectButton_->Name = L"connectButton_"; - this->connectButton_->Size = System::Drawing::Size(75, 23); - this->connectButton_->TabIndex = 3; - this->connectButton_->Text = L"Connect!"; - this->connectButton_->UseVisualStyleBackColor = true; - this->connectButton_->Click += gcnew System::EventHandler(this, &MainForm::ConnectButton_Click); - // - // closeButton_ - // - this->closeButton_->DialogResult = System::Windows::Forms::DialogResult::Cancel; - this->closeButton_->Location = System::Drawing::Point(224, 38); - this->closeButton_->Name = L"closeButton_"; - this->closeButton_->Size = System::Drawing::Size(75, 23); - this->closeButton_->TabIndex = 4; - this->closeButton_->Text = L"Close"; - this->closeButton_->UseVisualStyleBackColor = true; - this->closeButton_->Click += gcnew System::EventHandler(this, &MainForm::CloseButton_Click); - // - // MainForm - // - this->AcceptButton = this->connectButton_; - this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); - this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; - this->CancelButton = this->closeButton_; - this->ClientSize = System::Drawing::Size(310, 192); - this->ControlBox = false; - this->Controls->Add(label4); - this->Controls->Add(label3); - this->Controls->Add(label2); - this->Controls->Add(label1); - this->Controls->Add(this->closeButton_); - this->Controls->Add(this->connectButton_); - this->Controls->Add(this->resultsList_); - this->Controls->Add(this->userName_); - this->Controls->Add(this->password_); - this->Controls->Add(this->serverAddress_); - this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; - this->MaximizeBox = false; - this->MinimizeBox = false; - this->Name = L"MainForm"; - this->ShowIcon = false; - this->Text = L"MySQL++ Windows Forms Examples"; - this->ResumeLayout(false); - this->PerformLayout(); - - } -#pragma endregion -}; -} DELETED examples/vstudio/wforms/MainForm.resX Index: examples/vstudio/wforms/MainForm.resX ================================================================== --- examples/vstudio/wforms/MainForm.resX +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - - - False - - - False - - - False - - DELETED examples/vstudio/wforms/resource.h Index: examples/vstudio/wforms/resource.h ================================================================== --- examples/vstudio/wforms/resource.h +++ /dev/null @@ -1,3 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by app.rc DELETED examples/vstudio/wforms/wforms.cpp Index: examples/vstudio/wforms/wforms.cpp ================================================================== --- examples/vstudio/wforms/wforms.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// wforms.cpp : main project file. - -#include "MainForm.h" - -using namespace wforms; - -[STAThreadAttribute] -int main(array ^args) -{ - // Enabling Windows XP visual effects before any controls are created - Application::EnableVisualStyles(); - Application::SetCompatibleTextRenderingDefault(false); - - // Create the main window and run it - Application::Run(gcnew MainForm()); - return 0; -} DELETED examples/xaction.cpp Index: examples/xaction.cpp ================================================================== --- examples/xaction.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/*********************************************************************** - xaction.cpp - Example showing how to use the transaction support in - MySQL++ v2.1 and up. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "stock.h" -#include "util.h" - -#include - -#include - -using namespace std; - -int -main(int argc, char *argv[]) -{ - try { - // Establish the connection to the database server. - mysqlpp::Connection con(mysqlpp::use_exceptions); - if (!connect_to_db(argc, argv, con)) { - return 1; - } - - // Show initial state - mysqlpp::Query query = con.query(); - cout << "Initial state of stock table:" << endl; - print_stock_table(query); - - // Insert a few rows in a single transaction set - { - mysqlpp::Transaction trans(con); - - stock row1("Sauerkraut", 42, 1.2, 0.75, "2006-03-06"); - query.insert(row1); - query.execute(); - query.reset(); - - stock row2("Bratwurst", 24, 3.0, 4.99, "2006-03-06"); - query.insert(row2); - query.execute(); - query.reset(); - - cout << "\nRows are inserted, but not committed." << endl; - cout << "Verify this with another program (e.g. simple1), " - "then hit Enter." << endl; - getchar(); - - cout << "\nCommitting transaction gives us:" << endl; - trans.commit(); - print_stock_table(query); - } - - // Now let's test auto-rollback - { - mysqlpp::Transaction trans(con); - cout << "\nNow adding catsup to the database..." << endl; - - stock row("Catsup", 3, 3.9, 2.99, "2006-03-06"); - query.insert(row); - query.execute(); - query.reset(); - } - cout << "\nNo, yuck! We don't like catsup. Rolling it back:" << - endl; - print_stock_table(query); - - } - catch (const mysqlpp::BadQuery& er) { - // Handle any query errors - cerr << "Query error: " << er.what() << endl; - return -1; - } - catch (const mysqlpp::BadConversion& er) { - // Handle bad conversions - cerr << "Conversion error: " << er.what() << endl << - "\tretrieved data size: " << er.retrieved << - ", actual size: " << er.actual_size << endl; - return -1; - } - catch (const mysqlpp::Exception& er) { - // Catch-all for any other MySQL++ exceptions - cerr << "Error: " << er.what() << endl; - return -1; - } - - return 0; -} DELETED exrun Index: exrun ================================================================== --- exrun +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh -if [ -z "$1" ] -then - echo "usage: $0 [args...]" - echo - echo " Runs the given example, using the library in the current directory" - echo " instead of using the system library search mechanism. Accepts an " - echo " arbitrary number of arguments." - echo - echo " Example can be 'valgrind' instead, in which case we run the example" - echo " under valgrind in memory checking mode." - echo - exit 1 -fi - -TOOL= -PROG=$1 -if [ "$PROG" == 'valgrind' ] -then - TOOL='valgrind' - shift - PROG=$1 -elif [ "$PROG" == 'gdb' ] -then - TOOL='gdb --args' - shift - PROG=$1 -fi - -if [ -n "$1" ] -then - shift - - if [ ! -e libmysqlpp.so.2 ] - then - ( ln -sf libmysqlpp.so libmysqlpp.so.2 ) - fi - - if [ -e /usr/bin/ldd ] - then - LD_LIBRARY_PATH=. $TOOL ./$PROG $* - elif [ -e /usr/bin/otool ] - then - DYLD_LIBRARY_PATH=. $TOOL ./$PROG $* - else - echo ERROR: I don\'t grok this system\'s dynamic linkage system. - fi -else - echo "usage: $0 $TOOL [args...]" - echo - echo " Run $0 without arguments for more detailed usage info." - echo - exit 1 -fi DELETED exrun.bat Index: exrun.bat ================================================================== --- exrun.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off -set PROG=%1 -if not exist %PROG% set PROG=Debug\%1 -shift - -set PATH=Debug;%PATH% -%PROG% %* DELETED install.bat Index: install.bat ================================================================== --- install.bat +++ /dev/null @@ -1,38 +0,0 @@ -@echo off -if "%1" == "" goto error - -set BASE_DIR=c:\mysql++ -set INST_INC_DIR=%BASE_DIR%\include -set INST_LIB_DIR=%BASE_DIR%\%1 - -if not exist %BASE_DIR% mkdir %BASE_DIR% -if not exist %INST_INC_DIR% mkdir %INST_INC_DIR% -if not exist %INST_LIB_DIR% mkdir %INST_LIB_DIR% -if not exist %INST_LIB_DIR%\debug mkdir %INST_LIB_DIR%\debug -if not exist %INST_LIB_DIR%\release mkdir %INST_LIB_DIR%\release - -copy lib\*.h "%INST_INC_DIR%" > NUL - -if exist *.a goto install_mingw -copy debug\*.dll "%INST_LIB_DIR%\debug" > NUL -copy debug\*.lib "%INST_LIB_DIR%\debug" > NUL -copy release\*.dll "%INST_LIB_DIR%\release" > NUL -copy release\*.lib "%INST_LIB_DIR%\release" > NUL -goto install_done -:install_mingw -copy *.a "%INST_LIB_DIR%\debug" > NUL -echo WARNING: I assume you built a debug version of the library, as that -echo is what you get with MinGW unless you make a special effort. You -echo must do a manual install if you make a release version. - -:install_done -echo MySQL++ (%1 version) installed successfully! -goto end - -:error -echo usage: install [subdir] -echo. -echo Installs MySQL++ into the given subdirectory of %BASE_DIR% - -:end - DELETED lib/Doxyfile.in Index: lib/Doxyfile.in ================================================================== --- lib/Doxyfile.in +++ /dev/null @@ -1,1258 +0,0 @@ -# Doxyfile 1.5.2-1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file that -# follow. The default is UTF-8 which is also the encoding used for all text before -# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into -# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of -# possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = MySQL++ - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = @PACKAGE_VERSION@ - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = ../doc - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = - -# This tag can be used to specify the character encoding of the source files that -# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default -# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. -# See http://www.gnu.org/software/libiconv for the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = custom.h \ - custom-macros.h - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the output. -# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, -# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html/refman - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = ../doc/html/refman/_header.html - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = letter - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN_IGNORE - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to -# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to -# specify the directory where the mscgen tool resides. If left empty the tool is assumed to -# be found in the default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen will always -# show the root nodes and its direct children regardless of this setting. - -DOT_GRAPH_MAX_NODES = 50 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO DELETED lib/autoflag.h Index: lib/autoflag.h ================================================================== --- lib/autoflag.h +++ /dev/null @@ -1,57 +0,0 @@ -/// \file autoflag.h -/// \brief Defines a template for setting a flag within a given variable -/// scope, and resetting it when exiting that scope. - -/*********************************************************************** - Copyright (c) 2007 by Educational Technology Resources, Inc. Others - may also hold copyrights on code in this file. See the CREDITS 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 -***********************************************************************/ - -#if !defined(MYSQLPP_AUTOFLAG_H) -#define MYSQLPP_AUTOFLAG_H - -/// \brief A template for setting a flag on a variable as long as the -/// object that set it is in scope. Flag resets when object goes -/// out of scope. Works on anything that looks like bool. - -template -class AutoFlag -{ -public: - /// \brief Constructor: sets ref to true. - AutoFlag(T& ref) : - referent_(ref) - { - referent_ = true; - } - - /// \brief Destructor: sets referent passed to ctor to false. - ~AutoFlag() - { - referent_ = false; - } - -private: - T& referent_; -}; - -#endif // !defined(MYSQLPP_AUTOFLAG_H) - DELETED lib/coldata.cpp Index: lib/coldata.cpp ================================================================== --- lib/coldata.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/*********************************************************************** - coldata.cpp - Implements the ColData_Tmpl template. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 "coldata.h" -#include "const_string.h" - -#include - -namespace mysqlpp { - -template class ColData_Tmpl; -template class ColData_Tmpl; - -} // end namespace mysqlpp DELETED lib/coldata.h Index: lib/coldata.h ================================================================== --- lib/coldata.h +++ /dev/null @@ -1,386 +0,0 @@ -/// \file coldata.h -/// \brief Declares classes for converting string data to any of -/// the basic C types. -/// -/// Roughly speaking, this defines classes that are the inverse of -/// mysqlpp::SQLString. - -/*********************************************************************** - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#ifndef MYSQLPP_COLDATA_H -#define MYSQLPP_COLDATA_H - -#include "common.h" - -#include "const_string.h" -#include "convert.h" -#include "exceptions.h" -#include "null.h" -#include "string_util.h" -#include "type_info.h" - -#include -#include -#include - -#include - -namespace mysqlpp { - -/// \brief Template for string data that can convert itself to any -/// standard C data type. -/// -/// Do not use this class directly. Use the typedef ColData or -/// MutableColData instead. ColData is a \c ColData_Tmpl and MutableColData is a -/// \c ColData_Tmpl. -/// -/// The ColData types add to the C++ string type the ability to -/// automatically convert the string data to any of the basic C types. -/// This is important with SQL, because all data coming from the -/// database is in string form. MySQL++ uses this class internally -/// to hold the data it receives from the server, so you can use it -/// naturally, because it does the conversions implicitly: -/// -/// \code ColData("12.86") + 2.0 \endcode -/// -/// That works fine, but be careful. If you had said this instead: -/// -/// \code ColData("12.86") + 2 \endcode -/// -/// the result would be 14 because 2 is an integer, and C++'s type -/// conversion rules put the ColData object in an integer context. -/// -/// If these automatic conversions scare you, define the macro -/// NO_BINARY_OPERS to disable this behavior. -/// -/// This class also has some basic information about the type of data -/// stored in it, to allow it to do the conversions more intelligently -/// than a trivial implementation would allow. - -template -class MYSQLPP_EXPORT ColData_Tmpl : public Str -{ -public: - /// \brief Default constructor - /// - /// Null flag is set to false, type data is not set, and string - /// data is left empty. - /// - /// It's probably a bad idea to use this ctor, becuase there's no - /// way to set the type data once the object's constructed. - ColData_Tmpl() : - null_(false) - { - } - - /// \brief Copy ctor - /// - /// \param cd the other ColData_Tmpl object - ColData_Tmpl(const ColData_Tmpl& cd) : - Str(cd.data(), cd.length()), - type_(cd.type_), - null_(cd.null_) - { - } - - /// \brief Constructor allowing you to set the null flag and the - /// type data. - /// - /// \param n if true, data is a SQL null - /// \param t MySQL type information for data being stored - explicit ColData_Tmpl(bool n, - mysql_type_info t = mysql_type_info::string_type) : - type_(t), - null_(n) - { - } - - /// \brief C++ string version of full ctor - /// - /// \param str the string this object represents - /// \param t MySQL type information for data within str - /// \param n if true, str is a SQL null - explicit ColData_Tmpl(const std::string& str, - mysql_type_info t = mysql_type_info::string_type, - bool n = false) : - Str(str), - type_(t), - null_(n) - { - } - - /// \brief Null-terminated C string version of full ctor - /// - /// \param str the string this object represents - /// \param t MySQL type information for data within str - /// \param n if true, str is a SQL null - explicit ColData_Tmpl(const char* str, - mysql_type_info t = mysql_type_info::string_type, - bool n = false) : - Str(str), - type_(t), - null_(n) - { - } - - /// \brief Full constructor. - /// - /// \param str the string this object represents - /// \param len the length of the string; embedded nulls are legal - /// \param t MySQL type information for data within str - /// \param n if true, str is a SQL null - explicit ColData_Tmpl(const char* str, typename Str::size_type len, - mysql_type_info t = mysql_type_info::string_type, - bool n = false) : - Str(str, len), - type_(t), - null_(n) - { - } - - /// \brief Get this object's current MySQL type. - mysql_type_info type() const { return type_; } - - /// \brief Returns true if data of this type should be quoted, false - /// otherwise. - bool quote_q() const { return type_.quote_q(); } - - /// \brief Returns true if data of this type should be escaped, false - /// otherwise. - bool escape_q() const { return type_.escape_q(); } - - /// \brief Template for converting data from one type to another. - template Type conv(Type dummy) const; - - /// \brief Set a flag indicating that this object is a SQL null. - void it_is_null() { null_ = true; } - - /// \brief Returns true if this object is a SQL null. - inline const bool is_null() const { return null_; } - - /// \brief Returns this object's data in C++ string form. - /// - /// This method is inefficient, and not recommended. It makes a - /// duplicate copy of the string that lives as long as the - /// \c ColData object itself. - /// - /// If you are using the \c MutableColData typedef for this - /// template, you can avoid the duplicate copy entirely. You can - /// pass a \c MutableColData object to anything expecting a - /// \c std::string and get the right result. (This didn't work - /// reliably prior to v2.3.) - /// - /// This method is arguably useful with plain \c ColData objects, - /// but there are more efficient alternatives. If you know your - /// data is a null-terminated C string, just cast this object to - /// a \c const \c char* or call the \c data() method. This gives - /// you a pointer to our internal buffer, so the copy isn't needed. - /// If the \c ColData can contain embedded null characters, you do - /// need to make a copy, but it's better to make your own copy of - /// the string, instead of calling get_string(), so you can better - /// control its lifetime: - /// - /// \code - /// ColData cd = ...; - /// std::string s(cd.data(), cd.length()); - /// \endcode - inline const std::string& get_string() const - { - temp_buf_.assign(Str::data(), Str::length()); - return temp_buf_; - } - - /// \brief Returns a const char pointer to the object's raw data - operator cchar*() const { return Str::data(); } - - /// \brief Converts this object's string data to a signed char - operator signed char() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to an unsigned char - operator unsigned char() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to an int - operator int() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to an unsigned int - operator unsigned int() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to a short int - operator short int() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to an unsigned short - /// int - operator unsigned short int() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to a long int - operator long int() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to an unsigned long - /// int - operator unsigned long int() const - { return conv(static_cast(0)); } - -#if !defined(NO_LONG_LONGS) - /// \brief Converts this object's string data to the platform- - /// specific 'longlong' type, usually a 64-bit integer. - operator longlong() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to the platform- - /// specific 'ulonglong' type, usually a 64-bit unsigned integer. - operator ulonglong() const - { return conv(static_cast(0)); } -#endif - - /// \brief Converts this object's string data to a float - operator float() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to a double - operator double() const - { return conv(static_cast(0)); } - - /// \brief Converts this object's string data to a bool - operator bool() const { return conv(0); } - - template operator Null() const; - -private: - mysql_type_info type_; - mutable std::string temp_buf_; - bool null_; -}; - -/// \typedef ColData_Tmpl ColData -/// \brief The type that is returned by constant rows -typedef ColData_Tmpl ColData; - -/// \typedef ColData_Tmpl MutableColData -/// \brief The type that is returned by mutable rows -typedef ColData_Tmpl MutableColData; - - -#if !defined(NO_BINARY_OPERS) && !defined(DOXYGEN_IGNORE) -// Ignore this section is NO_BINARY_OPERS is defined, or if this section -// is being parsed by Doxygen. In the latter case, it's ignored because -// Doxygen doesn't understand it correctly, and we can't be bothered to -// explain it to Doxygen. - -#define oprsw(opr, other, conv) \ - template \ - inline other operator opr (ColData_Tmpl x, other y) \ - {return static_cast(x) opr y;} \ - template \ - inline other operator opr (other x, ColData_Tmpl y) \ - {return x opr static_cast(y);} - -#define operator_binary(other, conv) \ - oprsw(+, other, conv) \ - oprsw(-, other, conv) \ - oprsw(*, other, conv) \ - oprsw(/, other, conv) - -#define operator_binary_int(other, conv) \ - operator_binary(other, conv) \ - oprsw(%, other, conv) \ - oprsw(&, other, conv) \ - oprsw(^, other, conv) \ - oprsw(|, other, conv) \ - oprsw(<<, other, conv) \ - oprsw(>>, other, conv) - -operator_binary(float, double) -operator_binary(double, double) - -operator_binary_int(char, long int) -operator_binary_int(int, long int) -operator_binary_int(short int, long int) -operator_binary_int(long int, long int) - -operator_binary_int(unsigned char, unsigned long int) -operator_binary_int(unsigned int, unsigned long int) -operator_binary_int(unsigned short int, unsigned long int) -operator_binary_int(unsigned long int, unsigned long int) - -#if !defined(NO_LONG_LONGS) -operator_binary_int(longlong, longlong) -operator_binary_int(ulonglong, ulonglong) -#endif -#endif // NO_BINARY_OPERS - -/// \brief Converts this object to a SQL null -/// -/// Returns a copy of the global null object if the string data held by -/// the object is exactly equal to "NULL". Else, it constructs an empty -/// object of type T and tries to convert it to Null. -template template -ColData_Tmpl::operator Null() const -{ - if ((Str::size() == 4) && - (*this)[0] == 'N' && - (*this)[1] == 'U' && - (*this)[2] == 'L' && - (*this)[3] == 'L') { - return Null(null); - } - else { - return Null(conv(T())); - } -} - -template template -Type ColData_Tmpl::conv(Type /* dummy */) const -{ - std::string strbuf(Str::data(), Str::length()); - strip_all_blanks(strbuf); - std::string::size_type len = strbuf.size(); - const char* str = strbuf.c_str(); - const char* end = str; - Type num = mysql_convert(str, end); - - if (*end == '.') { - ++end; - for (; *end == '0'; ++end) ; - } - - if (*end != '\0' && end != 0) { - throw BadConversion(typeid(Type).name(), Str::c_str(), - end - str, len); - } - - return num; -} - -} // end namespace mysqlpp - -#endif DELETED lib/common.h Index: lib/common.h ================================================================== --- lib/common.h +++ /dev/null @@ -1,161 +0,0 @@ -/// \file common.h -/// \brief This file includes top-level definitions for use both -/// internal to the library, and outside it. Contrast mysql++.h -/// -/// This file mostly takes care of platform differences. - -/*********************************************************************** - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#if !defined(MYSQLPP_COMMON_H) -#define MYSQLPP_COMMON_H - -#if !defined(DOXYGEN_IGNORE) -// Doxygen will not generate documentation for the following stuff. - -// Work out major platform-specific stuff here. -#if defined(__WIN32__) || defined(_WIN32) -# define MYSQLPP_PLATFORM_WINDOWS - - // Windows compiler support. Tested with Microsoft Visual C++, - // Borland C++ Builder, and MinGW GCC. -# include - - // Stuff for Visual C++ only -# if defined(_MSC_VER) - // Disable whining about using 'this' as a member initializer on VC++. -# pragma warning(disable: 4355) - // Disable whining about implicit conversions to bool -# pragma warning(disable: 4800) - // Disable nagging about new "secure" functions like strncpy_s() -# pragma warning(disable: 4996) - // Disable complaints about STL data members: VC++ believes - // these need to be __declspec(dllexport) for some reason. -# pragma warning(disable: 4251) - // Call _snprintf() for VC++ version of snprintf() function -# define snprintf _snprintf -# endif - - // Define DLL import/export tags for Windows compilers, where we build - // the library into a DLL, for LGPL license compatibility reasons. - // (This is based on a similar mechanism in wxWindows.) - - #ifdef MYSQLPP_MAKING_DLL - // When making the DLL, export tagged symbols, so they appear - // in the import library. - #define MYSQLPP_EXPORT __declspec(dllexport) - #elif !defined(MYSQLPP_NO_DLL) - // We must be _using_ the DLL, so import symbols instead. - #define MYSQLPP_EXPORT __declspec(dllimport) - #else - // Not making a DLL at all, so no-op these declspecs - #define MYSQLPP_EXPORT - #endif -#else - // If not Windows, we assume some sort of Unixy build environment, - // where autotools is used. (This includes Cygwin!) #include the - // config.h file only if this file was included from a non-header - // file, because headers must not be dependent on config.h. -# if defined(MYSQLPP_NOT_HEADER) -# include "config.h" -# endif - - // Make DLL stuff a no-op on this platform. - #define MYSQLPP_EXPORT -#endif - -#if defined(MYSQLPP_MYSQL_HEADERS_BURIED) -# include -#else -# include -#endif - -namespace mysqlpp { - -/// \brief Alias for 'true', to make code requesting exceptions more -/// readable. -const bool use_exceptions = true; - -/// \brief Used to disambiguate overloads of equal_list() in SSQLSes. -enum sql_cmp_type { sql_use_compare }; - -#if !defined(DOXYGEN_IGNORE) -// Figure out how to get large integer support on this system. Suppress -// refman documentation for these typedefs, as they're system-dependent. -#if defined(NO_LONG_LONGS) -// Alias "longlong" and "ulonglong" to the regular "long" counterparts -typedef unsigned long ulonglong; -typedef long longlong; -#elif defined(_MSC_VER) -// It's VC++, so we'll use Microsoft's 64-bit integer types -typedef unsigned __int64 ulonglong; -typedef __int64 longlong; -#else -// No better idea, so assume the C99 convention. If your compiler -// doesn't support this, please provide a patch to extend this ifdef, or -// define NO_LONG_LONGS. -typedef unsigned long long ulonglong; -typedef long long longlong; -#endif -#endif // !defined(DOXYGEN_IGNORE) - -/// \brief Contraction for 'const char*' -typedef const char cchar; - -#if !defined(MYSQLPP_NO_UNSIGNED_INT_TYPES) -/// \brief Contraction for 'unsigned int' -typedef unsigned int uint; -/// \brief Contraction for 'unsigned long' -typedef unsigned long ulong; -#endif - -} // end namespace mysqlpp - -// The MySQL headers define these macros, which is completely wrong in a -// C++ project. Undo the damage. -#undef min -#undef max - -#endif // !defined(DOXYGEN_IGNORE) - - -// Now that we've defined all the stuff above, we can pull in the full -// MySQL header. Basically, the above largely replaces MySQL's my_global.h -// while actually working with C++. This is why we disobey the MySQL -// developer docs, which recommend including my_global.h before mysql.h. -#if defined(MYSQLPP_MYSQL_HEADERS_BURIED) -# include -#else -# include -#endif - - -namespace mysqlpp { - -/// \brief Alias for MYSQL_FIELD -typedef MYSQL_FIELD Field; - -} // end namespace mysqlpp - -#endif // !defined(MYSQLPP_COMMON_H) DELETED lib/connection.cpp Index: lib/connection.cpp ================================================================== --- lib/connection.cpp +++ /dev/null @@ -1,725 +0,0 @@ -/*********************************************************************** - connection.cpp - Implements the Connection class. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2006 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#define MYSQLPP_NOT_HEADER -#include "common.h" - -#include "connection.h" - -#include "query.h" -#include "result.h" - -// An argument was added to mysql_shutdown() in MySQL 4.1.3 and 5.0.1. -#if ((MYSQL_VERSION_ID >= 40103) && (MYSQL_VERSION_ID <= 49999)) || (MYSQL_VERSION_ID >= 50001) -# define SHUTDOWN_ARG ,SHUTDOWN_DEFAULT -#else -# define SHUTDOWN_ARG -#endif - -#define NELEMS(a) (sizeof(a) / sizeof(a[0])) - -using namespace std; - -namespace mysqlpp { - -/// \brief Sets a variable to a given value temporarily. -/// -/// Saves existing value, sets new value, and restores old value when -/// the object is destroyed. Used to set a flag in an exception-safe -/// manner. -template -class scoped_var_set -{ -public: - /// \brief Create object, saving old value, setting new value - scoped_var_set(T& var, T new_value) : - var_(var) - { - old_value_ = var_; - var_ = new_value; - } - - /// \brief Destroy object, restoring old value - ~scoped_var_set() - { - var_ = old_value_; - } - -private: - T& var_; - T old_value_; -}; - - -// Initialize table of legal option argument types. -Connection::OptionArgType -Connection::legal_opt_arg_types_[Connection::opt_COUNT] = { - Connection::opt_type_integer, // opt_connect_timeout - Connection::opt_type_none, // opt_compress - Connection::opt_type_none, // opt_named_pipe - Connection::opt_type_string, // opt_init_command - Connection::opt_type_string, // opt_read_default_file - Connection::opt_type_string, // opt_read_default_group - Connection::opt_type_string, // opt_set_charset_dir - Connection::opt_type_string, // opt_set_charset_name - Connection::opt_type_integer, // opt_local_infile - Connection::opt_type_integer, // opt_protocol - Connection::opt_type_string, // opt_shared_memory_base_name - Connection::opt_type_integer, // opt_read_timeout - Connection::opt_type_integer, // opt_write_timeout - Connection::opt_type_none, // opt_use_result - Connection::opt_type_none, // opt_use_remote_connection - Connection::opt_type_none, // opt_use_embedded_connection - Connection::opt_type_none, // opt_guess_connection - Connection::opt_type_string, // opt_set_client_ip - Connection::opt_type_boolean, // opt_secure_auth - Connection::opt_type_boolean, // opt_multi_statements - Connection::opt_type_boolean, // opt_report_data_truncation - Connection::opt_type_boolean, // opt_reconnect -}; - - -Connection::Connection(bool te) : -OptionalExceptions(te), -Lockable(false), -is_connected_(false), -connecting_(false), -success_(false) -{ - mysql_init(&mysql_); -} - - -Connection::Connection(const char* db, const char* host, - const char* user, const char* passwd, uint port, - my_bool compress, unsigned int connect_timeout, - cchar* socket_name, unsigned int client_flag) : -OptionalExceptions(), -Lockable(false), -connecting_(false) -{ - mysql_init(&mysql_); - if (connect(db, host, user, passwd, port, compress, - connect_timeout, socket_name, client_flag)) { - unlock(); - success_ = is_connected_ = true; - } - else { - unlock(); - success_ = is_connected_ = false; - if (throw_exceptions()) { - throw ConnectionFailed(error()); - } - } -} - - -Connection::Connection(const Connection& other) : -OptionalExceptions(), -Lockable(false), -is_connected_(false) -{ - copy(other); -} - - -Connection::~Connection() -{ - disconnect(); -} - - -Connection& -Connection::operator=(const Connection& rhs) -{ - copy(rhs); - return *this; -} - - -bool -Connection::connect(cchar* db, cchar* host, cchar* user, - cchar* passwd, uint port, my_bool compress, - unsigned int connect_timeout, cchar* socket_name, - unsigned int client_flag) -{ - lock(); - - // Drop previous connection, if any - if (connected()) { - disconnect(); - } - - // Set defaults for certain connection options. User can override - // these by calling set_option() before connect(). - set_option_default(opt_read_default_file, "my"); - set_option_default(opt_connect_timeout, connect_timeout); - if (compress) { - set_option_default(opt_compress); - } - -#if MYSQL_VERSION_ID >= 40101 - // Check to see if user turned on multi-statements before - // establishing the connection. This one we handle specially, by - // setting a flag during connection establishment. - if (option_set(opt_multi_statements)) { - client_flag |= CLIENT_MULTI_STATEMENTS; - } -#endif - - // Establish connection - scoped_var_set sb(connecting_, true); - if (mysql_real_connect(&mysql_, host, user, passwd, db, port, - socket_name, client_flag)) { - unlock(); - success_ = is_connected_ = true; - - if (db && db[0]) { - // Also attach to given database - success_ = select_db(db); - } - } - else { - unlock(); - success_ = is_connected_ = false; - if (throw_exceptions()) { - throw ConnectionFailed(error()); - } - } - - return success_; -} - - -bool -Connection::connect(const MYSQL& mysql) -{ - return connect(mysql.db, mysql.host, mysql.user, mysql.passwd, - mysql.port, mysql.options.compress, - mysql.options.connect_timeout, mysql.unix_socket, - mysql.client_flag); -} - - -void -Connection::copy(const Connection& other) -{ - if (connected()) { - disconnect(); - } - - mysql_init(&mysql_); - set_exceptions(other.throw_exceptions()); - - if (other.connected()) { - // Try to reconnect to server using same parameters - connect(other.mysql_); - } - else { - is_connected_ = false; - connecting_ = false; - success_ = false; - } -} - - -void -Connection::disconnect() -{ - mysql_close(&mysql_); - is_connected_ = false; -} - - -bool -Connection::create_db(const std::string& db) -{ - Query q(this, throw_exceptions()); - return q.exec("CREATE DATABASE " + db); -} - - -bool -Connection::drop_db(const std::string& db) -{ - Query q(this, throw_exceptions()); - return q.exec("DROP DATABASE " + db); -} - - -bool -Connection::select_db(const char *db) -{ - if (connected()) { - bool suc = !(mysql_select_db(&mysql_, db)); - if (throw_exceptions() && !suc) { - throw DBSelectionFailed(error()); - } - else { - return suc; - } - } - else { - if (throw_exceptions()) { - throw DBSelectionFailed("MySQL++ connection not established"); - } - else { - return false; - } - } -} - - -bool -Connection::reload() -{ - if (connected()) { - bool suc = !mysql_reload(&mysql_); - if (throw_exceptions() && !suc) { - // Reloading grant tables through this API isn't precisely a - // query, but it's acceptable to signal errors with BadQuery - // because the new mechanism is the FLUSH PRIVILEGES query. - // A program won't have to change when doing it the new way. - throw BadQuery(error()); - } - else { - return suc; - } - } - else { - if (throw_exceptions()) { - throw BadQuery("MySQL++ connection not established"); - } - else { - return false; - } - } -} - - -bool -Connection::shutdown() -{ - if (connected()) { - bool suc = !(mysql_shutdown(&mysql_ SHUTDOWN_ARG)); - if (throw_exceptions() && !suc) { - throw ConnectionFailed(error()); - } - else { - return suc; - } - } - else { - if (throw_exceptions()) { - throw ConnectionFailed("MySQL++ connection not established"); - } - else { - return false; - } - } -} - - -string -Connection::info() -{ - const char* i = mysql_info(&mysql_); - if (!i) { - return string(); - } - else { - return string(i); - } -} - - -Query -Connection::query() -{ - return Query(this, throw_exceptions()); -} - - -bool -Connection::set_option(Option option) -{ - if (connected()) { - // None of the argument-less options can be set once the - // connection is up. - return bad_option(option, opt_err_conn); - } - - bool success = false; - switch (option) { - case opt_compress: - success = set_option_impl(MYSQL_OPT_COMPRESS); - break; - - case opt_named_pipe: - success = set_option_impl(MYSQL_OPT_NAMED_PIPE); - break; - -#if MYSQL_VERSION_ID >= 40101 - case opt_use_result: - success = set_option_impl(MYSQL_OPT_USE_RESULT); - break; - - case opt_use_remote_connection: - success = set_option_impl(MYSQL_OPT_USE_REMOTE_CONNECTION); - break; - - case opt_use_embedded_connection: - success = set_option_impl(MYSQL_OPT_USE_EMBEDDED_CONNECTION); - break; - - case opt_guess_connection: - success = set_option_impl(MYSQL_OPT_GUESS_CONNECTION); - break; -#endif - default: - return bad_option(option, opt_err_type); - } - - if (success) { - applied_options_.push_back(OptionInfo(option)); - return true; - } - else { - return bad_option(option, opt_err_value); - } -} - - -bool -Connection::set_option(Option option, const char* arg) -{ - if (connected()) { - // None of the options taking a char* argument can be set once - // the connection is up. - return bad_option(option, opt_err_conn); - } - - bool success = false; - switch (option) { - case opt_init_command: - success = set_option_impl(MYSQL_INIT_COMMAND, arg); - break; - - case opt_read_default_file: - success = set_option_impl(MYSQL_READ_DEFAULT_FILE, arg); - break; - - case opt_read_default_group: - success = set_option_impl(MYSQL_READ_DEFAULT_GROUP, arg); - break; - - case opt_set_charset_dir: - success = set_option_impl(MYSQL_SET_CHARSET_DIR, arg); - break; - - case opt_set_charset_name: - success = set_option_impl(MYSQL_SET_CHARSET_NAME, arg); - break; - -#if MYSQL_VERSION_ID >= 40100 - case opt_shared_memory_base_name: - success = set_option_impl(MYSQL_SHARED_MEMORY_BASE_NAME, arg); - break; -#endif -#if MYSQL_VERSION_ID >= 40101 - case opt_set_client_ip: - success = set_option_impl(MYSQL_SET_CLIENT_IP, arg); - break; -#endif - default: - return bad_option(option, opt_err_type); - } - - if (success) { - applied_options_.push_back(OptionInfo(option, arg)); - return true; - } - else { - return bad_option(option, opt_err_value); - } -} - - -bool -Connection::set_option(Option option, unsigned int arg) -{ - if (connected()) { - // None of the options taking an int argument can be set once - // the connection is up. - return bad_option(option, opt_err_conn); - } - - bool success = false; - switch (option) { - case opt_connect_timeout: - success = set_option_impl(MYSQL_OPT_CONNECT_TIMEOUT, &arg); - break; - - case opt_local_infile: - success = set_option_impl(MYSQL_OPT_LOCAL_INFILE, &arg); - break; - -#if MYSQL_VERSION_ID >= 40100 - case opt_protocol: - success = set_option_impl(MYSQL_OPT_PROTOCOL, &arg); - break; -#endif -#if MYSQL_VERSION_ID >= 40101 - case opt_read_timeout: - success = set_option_impl(MYSQL_OPT_READ_TIMEOUT, &arg); - break; - - case opt_write_timeout: - success = set_option_impl(MYSQL_OPT_WRITE_TIMEOUT, &arg); - break; -#endif - default: - return bad_option(option, opt_err_type); - } - - if (success) { - applied_options_.push_back(OptionInfo(option, arg)); - return true; - } - else { - return bad_option(option, opt_err_value); - } -} - - -bool -Connection::set_option(Option option, bool arg) -{ - if (connected() && (option != opt_multi_statements)) { - // We're connected and it isn't an option that can be set - // after connection is up, so complain to user. - return bad_option(option, opt_err_conn); - } - - bool success = false; - switch (option) { -#if MYSQL_VERSION_ID >= 40101 - case opt_secure_auth: - success = set_option_impl(MYSQL_SECURE_AUTH, &arg); - break; - - case opt_multi_statements: - // If connection is up, set the flag immediately. If not, - // and caller wants this turned on, pretend success so that - // we store the info we need to turn this flag on when - // bringing the connection up. (If the caller is turning it - // off before conn comes up, we effectively ignore this, - // because that's the default.) - if (connected()) { - success = set_option_impl(arg ? - MYSQL_OPTION_MULTI_STATEMENTS_ON : - MYSQL_OPTION_MULTI_STATEMENTS_OFF); - } - else { - success = arg; - } - break; -#endif -#if MYSQL_VERSION_ID >= 50003 - case opt_report_data_truncation: - success = set_option_impl(MYSQL_REPORT_DATA_TRUNCATION, &arg); - break; -#endif -#if MYSQL_VERSION_ID >= 50013 - case opt_reconnect: - success = set_option_impl(MYSQL_OPT_RECONNECT, &arg); - break; -#endif - default: - return bad_option(option, opt_err_type); - } - - if (success) { - applied_options_.push_back(OptionInfo(option, arg)); - return true; - } - else { - return bad_option(option, opt_err_value); - } -} - - -bool -Connection::set_option_default(Option option) -{ - if (option_set(option)) { - return true; - } - else { - return set_option(option); - } -} - - -template -bool -Connection::set_option_default(Option option, T arg) -{ - if (option_set(option)) { - return true; - } - else { - return set_option(option, arg); - } -} - - -bool -Connection::set_option_impl(mysql_option moption, const void* arg) -{ - return !mysql_options(&mysql_, moption, - static_cast(arg)); -} - - -#if MYSQL_VERSION_ID >= 40101 -bool -Connection::set_option_impl(enum_mysql_set_option msoption) -{ - return !mysql_set_server_option(&mysql_, msoption); -} -#endif - - -bool -Connection::bad_option(Option option, OptionError error) -{ - if (throw_exceptions()) { - ostringstream os; - - switch (error) { - case opt_err_type: { - // Option was set using wrong argument type - OptionArgType type = option_arg_type(option); - os << "option " << option; - if (type == opt_type_none) { - os << " does not take an argument"; - } - else { - os << " requires an argument of type " << type; - } - break; - } - - case opt_err_value: - // C API rejected option, which probably indicates that - // you passed a option that it doesn't understand. - os << "option " << option << " not supported in MySQL " - "C API v"; - api_version(os); - break; - - case opt_err_conn: - os << "option " << option << " can only be set " - "before connection is established"; - break; - } - - throw BadOption(os.str(), option); - } - - return false; -} - - -Connection::OptionArgType -Connection::option_arg_type(Option option) -{ - if ((option > opt_FIRST) && (option < opt_COUNT)) { - return legal_opt_arg_types_[option]; - } - else { - // Non-optional exception. Something is wrong with the library - // internals if this one is thrown. - throw BadOption("bad value given to option_arg_type()", option); - } -} - - -bool -Connection::option_set(Option option) -{ - for (OptionListIt it = applied_options_.begin(); - it != applied_options_.end(); - ++it) { - if (it->option == option) { - return true; - } - } - - return false; -} - - -void -Connection::enable_ssl(const char* key, const char* cert, - const char* ca, const char* capath, const char* cipher) -{ -#if defined(HAVE_MYSQL_SSL_SET) - mysql_ssl_set(&mysql_, key, cert, ca, capath, cipher); -#endif -} - - -ostream& -Connection::api_version(ostream& os) -{ - const int major = MYSQL_VERSION_ID / 10000; - const int minor = (MYSQL_VERSION_ID - (major * 10000)) / 100; - const int bug = MYSQL_VERSION_ID - (major * 10000) - (minor * 100); - - os << major << '.' << minor << '.' << bug; - - return os; -} - - -int -Connection::ping() -{ - if (connected()) { - return mysql_ping(&mysql_); - } - else { - // Not connected, and we've forgotten everything we need in - // order to re-connect, if we once were connected. - return 1; - } -} - - -} // end namespace mysqlpp - DELETED lib/connection.h Index: lib/connection.h ================================================================== --- lib/connection.h +++ /dev/null @@ -1,579 +0,0 @@ -/// \file connection.h -/// \brief Declares the Connection class. -/// -/// Every program using MySQL++ must create a Connection object, which -/// manages information about the connection to the MySQL database, and -/// performs connection-related operations once the connection is up. -/// Subordinate classes, such as Query and Row take their defaults as -/// to whether exceptions are thrown when errors are encountered from -/// the Connection object that created them, directly or indirectly. - -/*********************************************************************** - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004-2007 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#ifndef MYSQLPP_CONNECTION_H -#define MYSQLPP_CONNECTION_H - -#include "common.h" - -#include "lockable.h" -#include "noexceptions.h" - -#include -#include - -namespace mysqlpp { - -#if !defined(DOXYGEN_IGNORE) -// Make Doxygen ignore this -class MYSQLPP_EXPORT Query; -#endif - -/// \brief Manages the connection to the MySQL database. - -class MYSQLPP_EXPORT Connection : public OptionalExceptions, public Lockable -{ -public: - /// \brief Legal types of option arguments - enum OptionArgType { - opt_type_none, - opt_type_string, - opt_type_integer, - opt_type_boolean - }; - - /// \brief Per-connection options you can set with set_option() - /// - /// This is currently a combination of the MySQL C API - /// \c mysql_option and \c enum_mysql_set_option enums. It may - /// be extended in the future. - enum Option - { - // Symbolic "first" option, before real options. Never send - // this to set_option()! - opt_FIRST = -1, - - opt_connect_timeout = 0, - opt_compress, - opt_named_pipe, - opt_init_command, - opt_read_default_file, - opt_read_default_group, - opt_set_charset_dir, - opt_set_charset_name, - opt_local_infile, - opt_protocol, - opt_shared_memory_base_name, - opt_read_timeout, - opt_write_timeout, - opt_use_result, - opt_use_remote_connection, - opt_use_embedded_connection, - opt_guess_connection, - opt_set_client_ip, - opt_secure_auth, - - // Set multi-query statement support; no argument - opt_multi_statements, - - // Set reporting of data truncation errors - opt_report_data_truncation, - - // Enable or disable automatic reconnection to the server if - // the connection is found to have been lost. - opt_reconnect, - - // Number of options supported. Never send this to - // set_option()! - opt_COUNT - }; - - /// \brief Create object without connecting it to the MySQL server. - /// - /// \param te if true, exceptions are thrown on errors - Connection(bool te = true); - - /// \brief Create object and connect to database server in one step. - /// - /// This constructor allows you to most fully specify the options - /// used when connecting to the MySQL database. It is the thinnest - /// layer in MySQL++ over the MySQL C API function - /// \c mysql_real_connect(). The correspondence isn't exact as - /// we have some additional parameters you'd have to set with - /// \c mysql_option() when using the C API. - /// - /// \param db name of database to use - /// \param host host name or IP address of MySQL server, or 0 - /// if server is running on the same host as your program - /// \param user user name to log in under, or 0 to use the user - /// name this program is running under - /// \param passwd password to use when logging in - /// \param port TCP port number MySQL server is listening on, or 0 - /// to use default value - /// \param compress if true, compress data passing through - /// connection, to save bandwidth at the expense of CPU time - /// \param connect_timeout max seconds to wait for server to - /// respond to our connection attempt - /// \param socket_name Unix domain socket server is using, if - /// connecting to MySQL server on the same host as this program - /// running on, or 0 to use default name - /// \param client_flag special connection flags. See MySQL C API - /// documentation for \c mysql_real_connect() for details. - Connection(const char* db, const char* host = "", - const char* user = "", const char* passwd = "", - uint port = 0, my_bool compress = 0, - unsigned int connect_timeout = 60, cchar* socket_name = 0, - unsigned int client_flag = 0); - - /// \brief Establish a new connection using the same parameters as - /// an existing C API connection. - /// - /// \param other existing Connection object - Connection(const Connection& other); - - /// \brief Establish a new connection using the same parameters as - /// an existing C API connection. - /// - /// \param mysql existing MySQL C API connection object - bool connect(const MYSQL& mysql); - - /// \brief Destroy connection object - ~Connection(); - - /// \brief Connect to database after object is created. - /// - /// It's better to use the connect-on-create constructor if you can. - /// See its documentation for the meaning of these parameters. - /// - /// If you call this method on an object that is already connected - /// to a database server, the previous connection is dropped and a - /// new connection is established. - bool connect(cchar* db = "", cchar* host = "", - cchar* user = "", cchar* passwd = "", uint port = 0, - my_bool compress = 0, unsigned int connect_timeout = 60, - cchar* socket_name = 0, unsigned int client_flag = 0); - - /// \brief Close connection to MySQL server. - /// - /// Closes the connection to the MySQL server. - void close() - { - mysql_close(&mysql_); - is_connected_ = false; - } - - /// \brief Calls MySQL C API function \c mysql_info() and returns - /// result as a C++ string. - std::string info(); - - /// \brief return true if connection was established successfully - /// - /// \return true if connection was established successfully - bool connected() const - { - return is_connected_; - } - - /// \brief Return true if the last query was successful - bool success() const - { - return success_; - } - - /// \brief Alias for close() - void purge() { close(); } - - /// \brief Return a new query object. - /// - /// The returned query object is tied to this MySQL connection, - /// so when you call a method like - /// \link mysqlpp::Query::execute() execute() \endlink - /// on that object, the query is sent to the server this object - /// is connected to. - Query query(); - - /// \brief Alias for success() - /// - /// Alias for success() member function. Allows you to have code - /// constructs like this: - /// - /// \code - /// Connection conn; - /// .... use conn - /// if (conn) { - /// ... last SQL query was successful - /// } - /// else { - /// ... error occurred in SQL query - /// } - /// \endcode - operator bool() { return success(); } - - /// \brief Copy an existing Connection object's state into this - /// object. - Connection& operator=(const Connection& rhs); - - /// \brief Return error message for last MySQL error associated with - /// this connection. - /// - /// Simply wraps \c mysql_error() in the C API. - const char* error() - { - return mysql_error(&mysql_); - } - - /// \brief Return last MySQL error number associated with this - /// connection - /// - /// Simply wraps \c mysql_errno() in the C API. - int errnum() { return mysql_errno(&mysql_); } - - /// \brief Wraps MySQL C API function \c mysql_refresh() - /// - /// The corresponding C API function is undocumented. All I know - /// is that it's used by \c mysqldump and \c mysqladmin, according - /// to MySQL bug database entry http://bugs.mysql.com/bug.php?id=9816 - /// If that entry changes to say that the function is now documented, - /// reevaluate whether we need to wrap it. It may be that it's not - /// supposed to be used by regular end-user programs. - int refresh(unsigned int refresh_options) - { - return mysql_refresh(&mysql_, refresh_options); - } - - /// \brief "Pings" the MySQL database - /// - /// Wraps \c mysql_ping() in the C API. As a result, this function - /// will try to reconnect to the server if the connection has been - /// dropped. - /// - /// \retval 0 if server is responding, regardless of whether we had - /// to reconnect or not - /// \retval nonzero if either we already know the connection is down - /// and cannot re-establish it, or if the server did not respond to - /// the ping and we could not re-establish the connection. - int ping(); - - /// \brief Kill a MySQL server thread - /// - /// \param pid ID of thread to kill - /// - /// Simply wraps \c mysql_kill() in the C API. - int kill(unsigned long pid) - { - return mysql_kill(&mysql_, pid); - } - - /// \brief Get MySQL client library version - /// - /// Simply wraps \c mysql_get_client_info() in the C API. - std::string client_info() - { - return std::string(mysql_get_client_info()); - } - - /// \brief Get information about the network connection - /// - /// String contains info about type of connection and the server - /// hostname. - /// - /// Simply wraps \c mysql_get_host_info() in the C API. - std::string host_info() - { - return std::string(mysql_get_host_info(&mysql_)); - } - - /// \brief Returns version number of MySQL protocol this connection - /// is using - /// - /// Simply wraps \c mysql_get_proto_info() in the C API. - int proto_info() - { - return mysql_get_proto_info(&mysql_); - } - - /// \brief Get the MySQL server's version number - /// - /// Simply wraps \c mysql_get_server_info() in the C API. - std::string server_info() - { - return std::string(mysql_get_server_info(&mysql_)); - } - - /// \brief Returns information about MySQL server status - /// - /// String is similar to that returned by the \c mysqladmin - /// \c status command. Among other things, it contains uptime - /// in seconds, and the number of running threads, questions - /// and open tables. - std::string stat() - { - return std::string(mysql_stat(&mysql_)); - } - - /// \brief Create a database - /// - /// \param db name of database to create - /// - /// \return true if database was created successfully - bool create_db(const std::string& db); - - /// \brief Drop a database - /// - /// \param db name of database to destroy - /// - /// \return true if database was created successfully - bool drop_db(const std::string& db); - - /// \brief Change to a different database - bool select_db(const std::string& db) - { - return select_db(db.c_str()); - } - - /// \brief Change to a different database - bool select_db(const char* db); - - /// \brief Ask MySQL server to reload the grant tables - /// - /// User must have the "reload" privilege. - /// - /// Simply wraps \c mysql_reload() in the C API. Since that - /// function is deprecated, this one is, too. The MySQL++ - /// replacement is execute("FLUSH PRIVILEGES"). - bool reload(); - - /// \brief Ask MySQL server to shut down. - /// - /// User must have the "shutdown" privilege. - /// - /// Simply wraps \c mysql_shutdown() in the C API. - bool shutdown(); - - /// \brief Return the connection options object - st_mysql_options get_options() const - { - return mysql_.options; - } - - /// \brief Sets a connection option, with no argument - /// - /// \param option any of the Option enum constants - /// - /// Based on the option you give, this function calls either - /// \c mysql_options() or \c mysql_set_server_option() in the C API. - /// - /// There are several overloaded versions of this function. The - /// others take an additional argument for the option and differ - /// only by the type of the option. Unlike with the underlying C - /// API, it does matter which of these overloads you call: if you - /// use the wrong argument type or pass an argument where one is - /// not expected (or vice versa), the call will either throw an - /// exception or return false, depending on the object's "throw - /// exceptions" flag. - /// - /// This mechanism parallels the underlying C API structure fairly - /// closely, but do not expect this to continue in the future. - /// Its very purpose is to 'paper over' the differences among the - /// C API's option setting mechanisms, so it may become further - /// abstracted from these mechanisms. - /// - /// \retval true if option was successfully set, or at least queued - /// for setting during connection establishment sequence - /// - /// If exceptions are enabled, a false return means the C API - /// rejected the option, or the connection is not established and - /// so the option was queued for later processing. If exceptions - /// are disabled, false can also mean that the argument was of the - /// wrong type (wrong overload was called), the option value was out - /// of range, or the option is not supported by the C API, most - /// because it isn't a high enough version. These latter cases will - /// cause BadOption exceptions otherwise. - bool set_option(Option option); - - /// \brief Sets a connection option, with string argument - bool set_option(Option option, const char* arg); - - /// \brief Sets a connection option, with integer argument - bool set_option(Option option, unsigned int arg); - - /// \brief Sets a connection option, with Boolean argument - bool set_option(Option option, bool arg); - - /// \brief Same as set_option(), except that it won't override - /// a previously-set option. - bool set_option_default(Option option); - - /// \brief Same as set_option(), except that it won't override - /// a previously-set option. - template - bool set_option_default(Option option, T arg); - - /// \brief Returns true if the given option has been set already - bool option_set(Option option); - - /// \brief Enable SSL-encrypted connection. - /// - /// \param key the pathname to the key file - /// \param cert the pathname to the certificate file - /// \param ca the pathname to the certificate authority file - /// \param capath directory that contains trusted SSL CA - /// certificates in pem format. - /// \param cipher list of allowable ciphers to use - /// - /// Must be called before connection is established. - /// - /// Wraps \c mysql_ssl_set() in MySQL C API. - void enable_ssl(const char* key = 0, - const char* cert = 0, const char* ca = 0, - const char* capath = 0, const char* cipher = 0); - - /// \brief Return the number of rows affected by the last query - /// - /// Simply wraps \c mysql_affected_rows() in the C API. - my_ulonglong affected_rows() - { - return mysql_affected_rows(&mysql_); - } - - /// \brief Get ID generated for an AUTO_INCREMENT column in the - /// previous INSERT query. - /// - /// \retval 0 if the previous query did not generate an ID. Use - /// the SQL function LAST_INSERT_ID() if you need the last ID - /// generated by any query, not just the previous one. - my_ulonglong insert_id() - { - return mysql_insert_id(&mysql_); - } - - /// \brief Insert C API version we're linked against into C++ stream - /// - /// Version will be of the form X.Y.Z, where X is the major version - /// number, Y the minor version, and Z the bug fix number. - std::ostream& api_version(std::ostream& os); - -protected: - /// \brief Types of option setting errors we can diagnose - enum OptionError { - opt_err_type, - opt_err_value, - opt_err_conn - }; - - /// \brief Drop the connection to the database server - /// - /// This method is protected because it should only be used within - /// the library. Unless you use the default constructor, this - /// object should always be connected. - void disconnect(); - - /// \brief Error handling routine for set_option() - bool bad_option(Option option, OptionError error); - - /// \brief Given option value, return its proper argument type - OptionArgType option_arg_type(Option option); - - /// \brief Set MySQL C API connection option - /// - /// Wraps \c mysql_options() in C API. This is an internal - /// implementation detail, to be used only by the public overloads - /// above. - bool set_option_impl(mysql_option moption, const void* arg = 0); - -#if MYSQL_VERSION_ID >= 40101 - /// \brief Set MySQL C API connection option - /// - /// Wraps \c mysql_set_server_option() in C API. This is an - /// internal implementation detail, to be used only by the public - /// overloads above. - bool set_option_impl(enum_mysql_set_option msoption); -#endif - - /// \brief Establish a new connection as a copy of an existing one - /// - /// \param other the connection to copy - void copy(const Connection& other); - -private: - friend class ResNSel; - friend class ResUse; - friend class Query; - - struct OptionInfo { - Option option; - OptionArgType arg_type; - std::string str_arg; - unsigned int int_arg; - bool bool_arg; - - OptionInfo(Option o) : - option(o), - arg_type(opt_type_none), - int_arg(0), - bool_arg(false) - { - } - - OptionInfo(Option o, const char* a) : - option(o), - arg_type(opt_type_string), - str_arg(a), - int_arg(0), - bool_arg(false) - { - } - - OptionInfo(Option o, unsigned int a) : - option(o), - arg_type(opt_type_integer), - int_arg(a), - bool_arg(false) - { - } - - OptionInfo(Option o, bool a) : - option(o), - arg_type(opt_type_boolean), - int_arg(0), - bool_arg(a) - { - } - }; - typedef std::deque OptionList; - typedef OptionList::const_iterator OptionListIt; - - MYSQL mysql_; - bool is_connected_; - bool connecting_; - bool success_; - OptionList applied_options_; - static OptionArgType legal_opt_arg_types_[]; -}; - - -} // end namespace mysqlpp - -#endif - DELETED lib/const_string.h Index: lib/const_string.h ================================================================== --- lib/const_string.h +++ /dev/null @@ -1,259 +0,0 @@ -/// \file const_string.h -/// \brief Declares a wrapper for const char* which behaves -/// in a way more useful to MySQL++. - -/*********************************************************************** - Copyright © 1998 by Kevin Atkinson, © 1999, 2000 and 2001 by MySQL AB, - and © 2004-2005, 2007, 2017 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#ifndef MYSQLPP_CONST_STRING_H -#define MYSQLPP_CONST_STRING_H - -#include "common.h" - -#include -#include -#include -#include -#include - -namespace mysqlpp { - -/// \brief Wrapper for const char* to make it behave in a -/// way more useful to MySQL++. -/// -/// This class implements a small subset of the standard string class. -/// -/// As of MySQL++ 2.3, it makes a copy of the string we are initialized -/// with, instead of just copying the pointer. This is required to -/// avoid problems with the new SSQLS + BLOB support. -class MYSQLPP_EXPORT const_string -{ -public: - /// \brief Type of the data stored in this object, when it is not - /// equal to SQL null. - typedef const char value_type; - - /// \brief Type of "size" integers - typedef unsigned int size_type; - - /// \brief Type used when returning a reference to a character in - /// the string. - typedef const char& const_reference; - - /// \brief Type of iterators - typedef const char* const_iterator; - - /// \brief Same as const_iterator because the data cannot be - /// changed. - typedef const_iterator iterator; - -#if !defined(DOXYGEN_IGNORE) -// Doxygen will not generate documentation for this section. - typedef int difference_type; - typedef const_reference reference; - typedef const char* const_pointer; - typedef const_pointer pointer; -#endif // !defined(DOXYGEN_IGNORE) - - /// \brief Create empty string - const_string() : - str_data_(0), - length_(0) - { - } - - /// \brief Initialize string from existing C++ string - const_string(const std::string& str) : - str_data_(0), - length_(str.length()) - { - str_data_ = new char[length_ + 1]; - memcpy(str_data_, str.data(), length_); - str_data_[length_] = '\0'; - } - - /// \brief Initialize string from existing C string - const_string(const char* str) : - str_data_(0), - length_(size_type(strlen(str))) - { - str_data_ = new char[length_ + 1]; - memcpy(str_data_, str, length_); - str_data_[length_] = '\0'; - } - - /// \brief Initialize string from existing C string of known length - const_string(const char* str, size_type len) : - str_data_(0), - length_(size_type(len)) - { - str_data_ = new char[length_ + 1]; - memcpy(str_data_, str, length_); - str_data_[length_] = '\0'; - } - - /// \brief Destroy string - ~const_string() - { - delete[] str_data_; - } - - /// \brief Assignment operator, from C string - const_string& operator=(const char* str) - { - delete[] str_data_; - length_ = size_type(strlen(str)); - str_data_ = new char[length_]; - memcpy(str_data_, str, length_); - return *this; - } - - /// \brief Assignment operator, from other const_string - const_string& operator=(const const_string& cs) - { - delete[] str_data_; - length_ = cs.length_; - str_data_ = new char[length_]; - memcpy(str_data_, cs.str_data_, length_); - return *this; - } - - /// \brief Return number of characters in the string - size_type length() const { return length_; } - - /// \brief Return number of characters in string - size_type size() const { return length_; } - - /// \brief Return iterator pointing to the first character of - /// the string - const_iterator begin() const { return str_data_; } - - /// \brief Return iterator pointing to one past the last character - /// of the string. - const_iterator end() const { return str_data_ + size(); } - - /// \brief Return the maximum number of characters in the string. - /// - /// Because this is a \c const string, this is just an alias for - /// size(); its size is always equal to the amount of data currently - /// stored. - size_type max_size() const { return size(); } - - /// \brief Return a reference to a character within the string. - const_reference operator [](size_type pos) const - { return str_data_[pos]; } - - /// \brief Return a reference to a character within the string. - /// - /// Unlike \c operator[](), this function throws an - /// \c std::out_of_range exception if the index isn't within range. - const_reference at(size_type pos) const - { - if (pos >= size()) - throw std::out_of_range(""); - else - return str_data_[pos]; - } - - /// \brief Return a const pointer to the string data. Not - /// necessarily null-terminated! - const char* c_str() const { return str_data_; } - - /// \brief Alias for \c c_str() - const char* data() const { return str_data_; } - - /// \brief Lexically compare this string to another. - /// - /// \param str string to compare against this one - /// - /// \retval <0 if str1 is lexically "less than" str2 - /// \retval 0 if str1 is equal to str2 - /// \retval >0 if str1 is lexically "greater than" str2 - int compare(const const_string& str) const - { - size_type i = 0, short_len = std::min(length(), str.length()); - while ((i < short_len) && (str_data_[i] != str.str_data_[i])) { - ++i; - } - return str_data_[i] - str.str_data_[i]; - } - -private: - char* str_data_; - size_type length_; -}; - - -/// \brief Inserts a const_string into a C++ stream -inline std::ostream& operator <<(std::ostream& o, - const const_string& str) -{ - return o << str.c_str(); -} - -/// \brief Calls lhs.compare(), passing rhs -inline int compare(const const_string& lhs, const const_string& rhs) -{ - return lhs.compare(rhs); -} - -/// \brief Returns true if lhs is the same as rhs -inline bool operator ==(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) == 0; -} - -/// \brief Returns true if lhs is not the same as rhs -inline bool operator !=(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) != 0; -} - -/// \brief Returns true if lhs is lexically less than rhs -inline bool operator <(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) < 0; -} - -/// \brief Returns true if lhs is lexically less or equal to rhs -inline bool operator <=(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) <= 0; -} - -/// \brief Returns true if lhs is lexically greater than rhs -inline bool operator >(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) > 0; -} - -/// \brief Returns true if lhs is lexically greater than or equal to rhs -inline bool operator >=(const_string& lhs, const_string& rhs) -{ - return compare(lhs, rhs) >= 0; -} - -} // end namespace mysqlpp - -#endif DELETED lib/convert.h Index: lib/convert.h ================================================================== --- lib/convert.h +++ /dev/null @@ -1,117 +0,0 @@ -/// \file convert.h -/// \brief Declares various string-to-integer type conversion templates. -/// -/// These templates are the mechanism used within mysqlpp::ColData_Tmpl -/// for its string-to-\e something conversions. - -/*********************************************************************** - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#ifndef MYSQLPP_CONVERT_H -#define MYSQLPP_CONVERT_H - -#include "common.h" - -#include - -namespace mysqlpp { - -#if !defined(DOXYGEN_IGNORE) -// Doxygen will not generate documentation for this section. - -template class mysql_convert; - -#define mysql__convert(TYPE, FUNC) \ - template <> \ - class mysql_convert {\ - public:\ - mysql_convert(const char* str, const char *& end) { \ - num_ = FUNC(str, const_cast(&end));}\ - operator TYPE () {return num_;}\ - private:\ - TYPE num_;\ - };\ - -#if defined(_MSC_VER) -# pragma warning(disable: 4244) -#endif - - mysql__convert(float, strtod) - mysql__convert(double, strtod) - -#if defined(_MSC_VER) -# pragma warning(default: 4244) -#endif - -#undef mysql__convert -#define mysql__convert(TYPE, FUNC) \ - template <> \ - class mysql_convert {\ - public:\ - mysql_convert(const char* str, const char *& end) { \ - num_ = FUNC(str, const_cast(&end),10);}\ - operator TYPE () {return num_;}\ - private:\ - TYPE num_;\ - };\ - -#if defined(_MSC_VER) -# pragma warning(disable: 4244) -#endif - - mysql__convert(char, strtol) - mysql__convert(signed char, strtol) - mysql__convert(int, strtol) - mysql__convert(short int, strtol) - mysql__convert(long int, strtol) - - mysql__convert(unsigned char, strtoul) - mysql__convert(unsigned int, strtoul) - mysql__convert(unsigned short int, strtoul) - mysql__convert(unsigned long int, strtoul) - -#if defined(_MSC_VER) -# pragma warning(default: 4244) -#endif - -#if !defined(NO_LONG_LONGS) -#if defined(_MSC_VER) -// Handle 64-bit ints the VC++ way -mysql__convert(longlong, _strtoi64) -mysql__convert(ulonglong, _strtoui64) -#else -// No better idea, so assume the C99 way. If your compiler doesn't -// support this, please provide a patch to extend this ifdef, or define -// NO_LONG_LONGS. -mysql__convert(longlong, strtoll) -mysql__convert(ulonglong, strtoull) -#endif -#endif // !defined(NO_LONG_LONGS) - -#endif // !defined(DOXYGEN_IGNORE) - -} // end namespace mysqlpp - -#endif - DELETED lib/custom-macros.h Index: lib/custom-macros.h ================================================================== --- lib/custom-macros.h +++ /dev/null @@ -1,24938 +0,0 @@ - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// This file is generated by the Perl script custom.pl. Please do -// not modify this file directly. Change the script instead. -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -// --------------------------------------------------- -// Begin Mandatory Compare -// --------------------------------------------------- - -#define sql_compare_define(NAME) \ - bool operator == (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) == 0;} \ - bool operator != (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) != 0;} \ - bool operator > (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) > 0;} \ - bool operator < (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) < 0;} \ - bool operator >= (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) >= 0;} \ - bool operator <= (const NAME &other) const \ - {return sql_compare_##NAME(*this,other) <= 0;} \ - int cmp (const NAME &other) const \ - {return sql_compare_##NAME(*this,other);} \ - int compare (const NAME &other) const \ - {return sql_compare_##NAME(*this,other);} - -#define sql_compare_define_0(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) - -#define sql_construct_define_0(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) - -#define sql_COMPARE__0(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) - -#define sql_compare_type_def_0(NAME, WHAT, NUM) \ - sql_compare_type_def_##NUM (NAME, WHAT, NUM) - -#define sql_compare_type_defe_0(NAME, WHAT, NUM) \ - sql_compare_type_defe_##NUM (NAME, WHAT, NUM) - -// --------------------------------------------------- -// End Mandatory Compare -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Compare 1 -// --------------------------------------------------- - -#define sql_compare_define_1(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1) : C1 (p1) {} \ - void set (const T1 &p1) { \ - C1 = p1;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_1(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1) { \ - C1 = p1;\ - \ - } \ - NAME (const T1 &p1) : C1 (p1) {} - -#define sql_compare_type_def_1(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true) - -#define sql_compare_type_defe_1(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true) - -#define sql_COMPARE__1(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - return mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - return mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - } - -// --------------------------------------------------- -// End Compare 1 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 2 -// --------------------------------------------------- - -#define sql_compare_define_2(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2) : C1 (p1), C2 (p2) {} \ - void set (const T1 &p1, const T2 &p2) { \ - C1 = p1;\ - C2 = p2;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_2(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2) { \ - C1 = p1;\ - C2 = p2;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2) : C1 (p1), C2 (p2) {} - -#define sql_compare_type_def_2(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true) - -#define sql_compare_type_defe_2(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true) - -#define sql_COMPARE__2(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - } - -// --------------------------------------------------- -// End Compare 2 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 3 -// --------------------------------------------------- - -#define sql_compare_define_3(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3) : C1 (p1), C2 (p2), C3 (p3) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_3(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3) : C1 (p1), C2 (p2), C3 (p3) {} - -#define sql_compare_type_def_3(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true) - -#define sql_compare_type_defe_3(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true) - -#define sql_COMPARE__3(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - } - -// --------------------------------------------------- -// End Compare 3 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 4 -// --------------------------------------------------- - -#define sql_compare_define_4(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4) : C1 (p1), C2 (p2), C3 (p3), C4 (p4) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_4(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4) : C1 (p1), C2 (p2), C3 (p3), C4 (p4) {} - -#define sql_compare_type_def_4(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true) - -#define sql_compare_type_defe_4(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true) - -#define sql_COMPARE__4(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - } - -// --------------------------------------------------- -// End Compare 4 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 5 -// --------------------------------------------------- - -#define sql_compare_define_5(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_5(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5) {} - -#define sql_compare_type_def_5(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true) - -#define sql_compare_type_defe_5(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true) - -#define sql_COMPARE__5(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - } - -// --------------------------------------------------- -// End Compare 5 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 6 -// --------------------------------------------------- - -#define sql_compare_define_6(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_6(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6) {} - -#define sql_compare_type_def_6(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true) - -#define sql_compare_type_defe_6(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true) - -#define sql_COMPARE__6(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - } - -// --------------------------------------------------- -// End Compare 6 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 7 -// --------------------------------------------------- - -#define sql_compare_define_7(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_7(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7) {} - -#define sql_compare_type_def_7(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_7(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true) - -#define sql_COMPARE__7(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - } - -// --------------------------------------------------- -// End Compare 7 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 8 -// --------------------------------------------------- - -#define sql_compare_define_8(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_8(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8) {} - -#define sql_compare_type_def_8(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_8(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__8(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - } - -// --------------------------------------------------- -// End Compare 8 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 9 -// --------------------------------------------------- - -#define sql_compare_define_9(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_9(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9) {} - -#define sql_compare_type_def_9(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_9(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__9(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - } - -// --------------------------------------------------- -// End Compare 9 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 10 -// --------------------------------------------------- - -#define sql_compare_define_10(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_10(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10) {} - -#define sql_compare_type_def_10(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_10(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__10(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - } - -// --------------------------------------------------- -// End Compare 10 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 11 -// --------------------------------------------------- - -#define sql_compare_define_11(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_11(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11) {} - -#define sql_compare_type_def_11(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_11(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__11(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - } - -// --------------------------------------------------- -// End Compare 11 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 12 -// --------------------------------------------------- - -#define sql_compare_define_12(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_12(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12) {} - -#define sql_compare_type_def_12(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_12(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__12(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - } - -// --------------------------------------------------- -// End Compare 12 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 13 -// --------------------------------------------------- - -#define sql_compare_define_13(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_13(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13) {} - -#define sql_compare_type_def_13(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_13(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__13(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - } - -// --------------------------------------------------- -// End Compare 13 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 14 -// --------------------------------------------------- - -#define sql_compare_define_14(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_14(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14) {} - -#define sql_compare_type_def_14(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_14(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__14(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - } - -// --------------------------------------------------- -// End Compare 14 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 15 -// --------------------------------------------------- - -#define sql_compare_define_15(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_15(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15) {} - -#define sql_compare_type_def_15(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_15(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__15(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - } - -// --------------------------------------------------- -// End Compare 15 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 16 -// --------------------------------------------------- - -#define sql_compare_define_16(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_16(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16) {} - -#define sql_compare_type_def_16(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_16(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__16(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - } - -// --------------------------------------------------- -// End Compare 16 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 17 -// --------------------------------------------------- - -#define sql_compare_define_17(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_17(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17) {} - -#define sql_compare_type_def_17(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_17(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__17(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - } - -// --------------------------------------------------- -// End Compare 17 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 18 -// --------------------------------------------------- - -#define sql_compare_define_18(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_18(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18) {} - -#define sql_compare_type_def_18(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_18(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__18(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - } - -// --------------------------------------------------- -// End Compare 18 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 19 -// --------------------------------------------------- - -#define sql_compare_define_19(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_19(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19) {} - -#define sql_compare_type_def_19(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_19(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__19(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - } - -// --------------------------------------------------- -// End Compare 19 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 20 -// --------------------------------------------------- - -#define sql_compare_define_20(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_20(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20) {} - -#define sql_compare_type_def_20(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_20(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__20(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - } - -// --------------------------------------------------- -// End Compare 20 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 21 -// --------------------------------------------------- - -#define sql_compare_define_21(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_21(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21) {} - -#define sql_compare_type_def_21(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_21(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__21(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - } - -// --------------------------------------------------- -// End Compare 21 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 22 -// --------------------------------------------------- - -#define sql_compare_define_22(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_22(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22) {} - -#define sql_compare_type_def_22(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_22(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__22(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - } - -// --------------------------------------------------- -// End Compare 22 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 23 -// --------------------------------------------------- - -#define sql_compare_define_23(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_23(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23) {} - -#define sql_compare_type_def_23(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_23(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__23(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - } - -// --------------------------------------------------- -// End Compare 23 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 24 -// --------------------------------------------------- - -#define sql_compare_define_24(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23), C24 (p24) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - C24 = p24;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_24(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - C24 = p24;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23), C24 (p24) {} - -#define sql_compare_type_def_24(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_24(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__24(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C24 , y.C24 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C24 , y.C24 ); \ - } - -// --------------------------------------------------- -// End Compare 24 -// --------------------------------------------------- - - -// --------------------------------------------------- -// Begin Compare 25 -// --------------------------------------------------- - -#define sql_compare_define_25(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24, const T25 &p25) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23), C24 (p24), C25 (p25) {} \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24, const T25 &p25) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - C24 = p24;\ - C25 = p25;\ - \ - } \ - sql_compare_define(NAME) - -#define sql_construct_define_25(NAME, T1, C1, T2, C2, T3, C3, T4, C4, T5, C5, T6, C6, T7, C7, T8, C8, T9, C9, T10, C10, T11, C11, T12, C12, T13, C13, T14, C14, T15, C15, T16, C16, T17, C17, T18, C18, T19, C19, T20, C20, T21, C21, T22, C22, T23, C23, T24, C24, T25, C25) \ - void set (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24, const T25 &p25) { \ - C1 = p1;\ - C2 = p2;\ - C3 = p3;\ - C4 = p4;\ - C5 = p5;\ - C6 = p6;\ - C7 = p7;\ - C8 = p8;\ - C9 = p9;\ - C10 = p10;\ - C11 = p11;\ - C12 = p12;\ - C13 = p13;\ - C14 = p14;\ - C15 = p15;\ - C16 = p16;\ - C17 = p17;\ - C18 = p18;\ - C19 = p19;\ - C20 = p20;\ - C21 = p21;\ - C22 = p22;\ - C23 = p23;\ - C24 = p24;\ - C25 = p25;\ - \ - } \ - NAME (const T1 &p1, const T2 &p2, const T3 &p3, const T4 &p4, const T5 &p5, const T6 &p6, const T7 &p7, const T8 &p8, const T9 &p9, const T10 &p10, const T11 &p11, const T12 &p12, const T13 &p13, const T14 &p14, const T15 &p15, const T16 &p16, const T17 &p17, const T18 &p18, const T19 &p19, const T20 &p20, const T21 &p21, const T22 &p22, const T23 &p23, const T24 &p24, const T25 &p25) : C1 (p1), C2 (p2), C3 (p3), C4 (p4), C5 (p5), C6 (p6), C7 (p7), C8 (p8), C9 (p9), C10 (p10), C11 (p11), C12 (p12), C13 (p13), C14 (p14), C15 (p15), C16 (p16), C17 (p17), C18 (p18), C19 (p19), C20 (p20), C21 (p21), C22 (p22), C23 (p23), C24 (p24), C25 (p25) {} - -#define sql_compare_type_def_25(NAME, WHAT, NUM) \ - return WHAT##_list(d, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_compare_type_defe_25(NAME, WHAT, NUM) \ - return WHAT##_list(d, c, m, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true) - -#define sql_COMPARE__25(NAME, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25) \ - template \ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C24 , y.C24 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C25 , y.C25 ); \ - } \ - template \ - int compare (const NAME &x, const NAME &y) { \ - int cmp; \ - cmp = mysqlpp::sql_cmp(x.C1 , y.C1 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C2 , y.C2 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C3 , y.C3 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C4 , y.C4 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C5 , y.C5 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C6 , y.C6 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C7 , y.C7 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C8 , y.C8 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C9 , y.C9 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C10 , y.C10 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C11 , y.C11 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C12 , y.C12 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C13 , y.C13 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C14 , y.C14 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C15 , y.C15 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C16 , y.C16 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C17 , y.C17 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C18 , y.C18 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C19 , y.C19 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C20 , y.C20 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C21 , y.C21 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C22 , y.C22 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C23 , y.C23 ); \ - if (cmp) return cmp; \ - cmp = mysqlpp::sql_cmp(x.C24 , y.C24 ); \ - if (cmp) return cmp; \ - return mysqlpp::sql_cmp(x.C25 , y.C25 ); \ - } - -// --------------------------------------------------- -// End Compare 25 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 1 -// --------------------------------------------------- -#define sql_create_basic_c_order_1(NAME, CMP, CONTR, T1, I1, O1)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_1(NAME, CMP, CONTR, T1, I1, N1, O1) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1) const {\ - return value_list(",", mysqlpp::quote, i1);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1) const {\ - return value_list(",", mysqlpp::quote, i1);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1) const {\ - return value_list(d, mysqlpp::quote, i1);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1) const {\ - return value_list(d, mysqlpp::quote, i1);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1) const {\ - return field_list(",", mysqlpp::do_nothing, i1);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1) const {\ - return field_list(",", mysqlpp::do_nothing, i1);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1) const {\ - return field_list(d, mysqlpp::do_nothing, i1);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1) const {\ - return field_list(d, mysqlpp::do_nothing, i1);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1) const {\ - return equal_list(d, c, mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1) const {\ - return equal_list(d, c, mysqlpp::quote, i1);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(1, false);\ - if (i1) (*include)[0]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(1, false); \ - (*include)[i1]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(1, false); \ - if (i1) (*include)[0]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(1, false); \ - (*include)[i1]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(1, false); \ - if (i1) (*include)[0]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(1, false); \ - (*include)[i1]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1) const {\ - return NAME##_cus_value_list (this, d, m, i1); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1) const { \ - return NAME##_cus_field_list (this, d, m, i1); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1) const { \ - return NAME##_cus_value_list (this, d, m, i1); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1) const {\ - return NAME##_cus_field_list (this, d, m, i1); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_1(NAME, CMP, CONTR, T1, I1) \ - sql_create_basic_c_order_1(NAME, CMP, CONTR, T1, I1, 0) - -#define sql_create_1(NAME, CMP, CONTR, T1, I1) \ - sql_create_complete_1(NAME, CMP, CONTR, T1, I1, #I1, 0) \ - -#define sql_create_c_order_1(NAME, CMP, CONTR, T1, I1, O1) \ - sql_create_complete_1(NAME, CMP, CONTR, T1, I1, #I1, O1) - -#define sql_create_c_names_1(NAME, CMP, CONTR, T1, I1, N1) \ - sql_create_complete_1(NAME, CMP, CONTR, T1, I1, N1, 0) - -// --------------------------------------------------- -// End Create 1 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 2 -// --------------------------------------------------- -#define sql_create_basic_c_order_2(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_2(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(2, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(2, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(2, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(2, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(2, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(2, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_2(NAME, CMP, CONTR, T1, I1, T2, I2) \ - sql_create_basic_c_order_2(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1) - -#define sql_create_2(NAME, CMP, CONTR, T1, I1, T2, I2) \ - sql_create_complete_2(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1) \ - -#define sql_create_c_order_2(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2) \ - sql_create_complete_2(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2) - -#define sql_create_c_names_2(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2) \ - sql_create_complete_2(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1) - -// --------------------------------------------------- -// End Create 2 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 3 -// --------------------------------------------------- -#define sql_create_basic_c_order_3(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_3(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(3, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(3, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(3, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(3, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(3, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(3, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_3(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3) \ - sql_create_basic_c_order_3(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2) - -#define sql_create_3(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3) \ - sql_create_complete_3(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2) \ - -#define sql_create_c_order_3(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3) \ - sql_create_complete_3(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3) - -#define sql_create_c_names_3(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3) \ - sql_create_complete_3(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2) - -// --------------------------------------------------- -// End Create 3 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 4 -// --------------------------------------------------- -#define sql_create_basic_c_order_4(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_4(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(4, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(4, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(4, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(4, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(4, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(4, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_4(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4) \ - sql_create_basic_c_order_4(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3) - -#define sql_create_4(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4) \ - sql_create_complete_4(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3) \ - -#define sql_create_c_order_4(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4) \ - sql_create_complete_4(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4) - -#define sql_create_c_names_4(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4) \ - sql_create_complete_4(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3) - -// --------------------------------------------------- -// End Create 4 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 5 -// --------------------------------------------------- -#define sql_create_basic_c_order_5(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_5(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(5, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(5, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(5, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(5, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(5, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(5, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_5(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5) \ - sql_create_basic_c_order_5(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4) - -#define sql_create_5(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5) \ - sql_create_complete_5(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4) \ - -#define sql_create_c_order_5(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5) \ - sql_create_complete_5(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5) - -#define sql_create_c_names_5(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5) \ - sql_create_complete_5(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4) - -// --------------------------------------------------- -// End Create 5 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 6 -// --------------------------------------------------- -#define sql_create_basic_c_order_6(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_6(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(6, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(6, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(6, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(6, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(6, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(6, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_6(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6) \ - sql_create_basic_c_order_6(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5) - -#define sql_create_6(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6) \ - sql_create_complete_6(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5) \ - -#define sql_create_c_order_6(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6) \ - sql_create_complete_6(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6) - -#define sql_create_c_names_6(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6) \ - sql_create_complete_6(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5) - -// --------------------------------------------------- -// End Create 6 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 7 -// --------------------------------------------------- -#define sql_create_basic_c_order_7(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_7(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(7, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(7, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(7, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(7, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(7, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(7, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_7(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7) \ - sql_create_basic_c_order_7(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6) - -#define sql_create_7(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7) \ - sql_create_complete_7(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6) \ - -#define sql_create_c_order_7(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7) \ - sql_create_complete_7(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7) - -#define sql_create_c_names_7(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7) \ - sql_create_complete_7(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6) - -// --------------------------------------------------- -// End Create 7 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 8 -// --------------------------------------------------- -#define sql_create_basic_c_order_8(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_8(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(8, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(8, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(8, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(8, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(8, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(8, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_8(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8) \ - sql_create_basic_c_order_8(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7) - -#define sql_create_8(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8) \ - sql_create_complete_8(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7) \ - -#define sql_create_c_order_8(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8) \ - sql_create_complete_8(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8) - -#define sql_create_c_names_8(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8) \ - sql_create_complete_8(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7) - -// --------------------------------------------------- -// End Create 8 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 9 -// --------------------------------------------------- -#define sql_create_basic_c_order_9(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_9(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(9, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(9, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(9, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(9, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(9, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(9, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_9(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9) \ - sql_create_basic_c_order_9(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8) - -#define sql_create_9(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9) \ - sql_create_complete_9(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8) \ - -#define sql_create_c_order_9(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9) \ - sql_create_complete_9(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9) - -#define sql_create_c_names_9(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9) \ - sql_create_complete_9(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8) - -// --------------------------------------------------- -// End Create 9 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 10 -// --------------------------------------------------- -#define sql_create_basic_c_order_10(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_10(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(10, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(10, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(10, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(10, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(10, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(10, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_10(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10) \ - sql_create_basic_c_order_10(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9) - -#define sql_create_10(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10) \ - sql_create_complete_10(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9) \ - -#define sql_create_c_order_10(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10) \ - sql_create_complete_10(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10) - -#define sql_create_c_names_10(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10) \ - sql_create_complete_10(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9) - -// --------------------------------------------------- -// End Create 10 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 11 -// --------------------------------------------------- -#define sql_create_basic_c_order_11(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_11(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(11, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(11, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(11, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(11, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(11, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(11, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_11(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11) \ - sql_create_basic_c_order_11(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10) - -#define sql_create_11(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11) \ - sql_create_complete_11(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10) \ - -#define sql_create_c_order_11(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11) \ - sql_create_complete_11(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11) - -#define sql_create_c_names_11(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11) \ - sql_create_complete_11(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10) - -// --------------------------------------------------- -// End Create 11 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 12 -// --------------------------------------------------- -#define sql_create_basic_c_order_12(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_12(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(12, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(12, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(12, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(12, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(12, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(12, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_12(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12) \ - sql_create_basic_c_order_12(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11) - -#define sql_create_12(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12) \ - sql_create_complete_12(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11) \ - -#define sql_create_c_order_12(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12) \ - sql_create_complete_12(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12) - -#define sql_create_c_names_12(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12) \ - sql_create_complete_12(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11) - -// --------------------------------------------------- -// End Create 12 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 13 -// --------------------------------------------------- -#define sql_create_basic_c_order_13(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_13(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(13, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(13, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(13, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(13, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(13, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(13, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_13(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13) \ - sql_create_basic_c_order_13(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12) - -#define sql_create_13(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13) \ - sql_create_complete_13(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12) \ - -#define sql_create_c_order_13(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13) \ - sql_create_complete_13(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13) - -#define sql_create_c_names_13(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13) \ - sql_create_complete_13(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12) - -// --------------------------------------------------- -// End Create 13 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 14 -// --------------------------------------------------- -#define sql_create_basic_c_order_14(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_14(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(14, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(14, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(14, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(14, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(14, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(14, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_14(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14) \ - sql_create_basic_c_order_14(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13) - -#define sql_create_14(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14) \ - sql_create_complete_14(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13) \ - -#define sql_create_c_order_14(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14) \ - sql_create_complete_14(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14) - -#define sql_create_c_names_14(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14) \ - sql_create_complete_14(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13) - -// --------------------------------------------------- -// End Create 14 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 15 -// --------------------------------------------------- -#define sql_create_basic_c_order_15(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_15(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(15, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(15, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(15, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(15, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(15, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(15, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_15(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15) \ - sql_create_basic_c_order_15(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14) - -#define sql_create_15(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15) \ - sql_create_complete_15(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14) \ - -#define sql_create_c_order_15(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15) \ - sql_create_complete_15(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15) - -#define sql_create_c_names_15(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15) \ - sql_create_complete_15(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14) - -// --------------------------------------------------- -// End Create 15 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 16 -// --------------------------------------------------- -#define sql_create_basic_c_order_16(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_16(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(16, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(16, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(16, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(16, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(16, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(16, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_16(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16) \ - sql_create_basic_c_order_16(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15) - -#define sql_create_16(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16) \ - sql_create_complete_16(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15) \ - -#define sql_create_c_order_16(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16) \ - sql_create_complete_16(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16) - -#define sql_create_c_names_16(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16) \ - sql_create_complete_16(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15) - -// --------------------------------------------------- -// End Create 16 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 17 -// --------------------------------------------------- -#define sql_create_basic_c_order_17(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_17(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(17, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(17, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(17, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(17, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(17, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(17, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, 0, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_17(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17) \ - sql_create_basic_c_order_17(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16) - -#define sql_create_17(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17) \ - sql_create_complete_17(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16) \ - -#define sql_create_c_order_17(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17) \ - sql_create_complete_17(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17) - -#define sql_create_c_names_17(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17) \ - sql_create_complete_17(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16) - -// --------------------------------------------------- -// End Create 17 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 18 -// --------------------------------------------------- -#define sql_create_basic_c_order_18(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_18(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(18, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(18, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(18, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(18, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(18, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(18, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, 0, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_18(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18) \ - sql_create_basic_c_order_18(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17) - -#define sql_create_18(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18) \ - sql_create_complete_18(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17) \ - -#define sql_create_c_order_18(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18) \ - sql_create_complete_18(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18) - -#define sql_create_c_names_18(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18) \ - sql_create_complete_18(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17) - -// --------------------------------------------------- -// End Create 18 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 19 -// --------------------------------------------------- -#define sql_create_basic_c_order_19(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_19(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(19, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(19, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(19, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(19, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(19, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(19, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, 0, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_19(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19) \ - sql_create_basic_c_order_19(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18) - -#define sql_create_19(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19) \ - sql_create_complete_19(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18) \ - -#define sql_create_c_order_19(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19) \ - sql_create_complete_19(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19) - -#define sql_create_c_names_19(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19) \ - sql_create_complete_19(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18) - -// --------------------------------------------------- -// End Create 19 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 20 -// --------------------------------------------------- -#define sql_create_basic_c_order_20(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, 0, 0, 0, 0, 0 ) - -#define sql_create_complete_20(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(20, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(20, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(20, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(20, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(20, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(20, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, 0, 0, 0, 0, 0 ) - -#define sql_create_basic_20(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20) \ - sql_create_basic_c_order_20(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19) - -#define sql_create_20(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20) \ - sql_create_complete_20(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19) \ - -#define sql_create_c_order_20(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20) \ - sql_create_complete_20(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20) - -#define sql_create_c_names_20(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20) \ - sql_create_complete_20(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19) - -// --------------------------------------------------- -// End Create 20 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 21 -// --------------------------------------------------- -#define sql_create_basic_c_order_21(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, 0, 0, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, 0, 0, 0, 0 ) - -#define sql_create_complete_21(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20, T21, I21, N21, O21) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20,\ - NAME##_##I21 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, 0, 0, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, 0, 0, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 ,\ - N21 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(21, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(21, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(21, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(21, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(21, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(21, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.manip << obj.obj->I21; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19] << obj.delem;\ - s << obj.manip << obj.obj->names[20]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I21;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[20];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, 0, 0, 0, 0 ) - -#define sql_create_basic_21(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21) \ - sql_create_basic_c_order_21(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19, T21, I21, 20) - -#define sql_create_21(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21) \ - sql_create_complete_21(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19, T21, I21, #I21, 20) \ - -#define sql_create_c_order_21(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21) \ - sql_create_complete_21(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20, T21, I21, #I21, O21) - -#define sql_create_c_names_21(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20, T21, I21, N21) \ - sql_create_complete_21(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19, T21, I21, N21, 20) - -// --------------------------------------------------- -// End Create 21 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 22 -// --------------------------------------------------- -#define sql_create_basic_c_order_22(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, 0, 0, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, 0, 0, 0 ) - -#define sql_create_complete_22(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20, T21, I21, N21, O21, T22, I22, N22, O22) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20,\ - NAME##_##I21,\ - NAME##_##I22 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, 0, 0, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, 0, 0, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 ,\ - N21 ,\ - N22 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(22, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(22, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(22, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(22, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(22, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(22, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.manip << obj.obj->I22; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19] << obj.delem;\ - s << obj.manip << obj.obj->names[20] << obj.delem;\ - s << obj.manip << obj.obj->names[21]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I22;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[20];\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[21];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, 0, 0, 0 ) - -#define sql_create_basic_22(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22) \ - sql_create_basic_c_order_22(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19, T21, I21, 20, T22, I22, 21) - -#define sql_create_22(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22) \ - sql_create_complete_22(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19, T21, I21, #I21, 20, T22, I22, #I22, 21) \ - -#define sql_create_c_order_22(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22) \ - sql_create_complete_22(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20, T21, I21, #I21, O21, T22, I22, #I22, O22) - -#define sql_create_c_names_22(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20, T21, I21, N21, T22, I22, N22) \ - sql_create_complete_22(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19, T21, I21, N21, 20, T22, I22, N22, 21) - -// --------------------------------------------------- -// End Create 22 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 23 -// --------------------------------------------------- -#define sql_create_basic_c_order_23(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, 0, 0, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, 0, 0 ) - -#define sql_create_complete_23(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20, T21, I21, N21, O21, T22, I22, N22, O22, T23, I23, N23, O23) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20,\ - NAME##_##I21,\ - NAME##_##I22,\ - NAME##_##I23 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, 0, 0, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, 0, 0, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 ,\ - N21 ,\ - N22 ,\ - N23 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(23, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(23, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(23, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(23, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(23, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(23, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.manip << obj.obj->I23; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19] << obj.delem;\ - s << obj.manip << obj.obj->names[20] << obj.delem;\ - s << obj.manip << obj.obj->names[21] << obj.delem;\ - s << obj.manip << obj.obj->names[22]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I23;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[20];\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[21];\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[22];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, 0, 0 ) - -#define sql_create_basic_23(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23) \ - sql_create_basic_c_order_23(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19, T21, I21, 20, T22, I22, 21, T23, I23, 22) - -#define sql_create_23(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23) \ - sql_create_complete_23(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19, T21, I21, #I21, 20, T22, I22, #I22, 21, T23, I23, #I23, 22) \ - -#define sql_create_c_order_23(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23) \ - sql_create_complete_23(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20, T21, I21, #I21, O21, T22, I22, #I22, O22, T23, I23, #I23, O23) - -#define sql_create_c_names_23(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20, T21, I21, N21, T22, I22, N22, T23, I23, N23) \ - sql_create_complete_23(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19, T21, I21, N21, 20, T22, I22, N22, 21, T23, I23, N23, 22) - -// --------------------------------------------------- -// End Create 23 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 24 -// --------------------------------------------------- -#define sql_create_basic_c_order_24(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23, T24, I24, O24)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23;\ - T24 I24; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, 0, 0)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23));\ - s->I24 = static_cast(row.at(O24)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, I24, 0 ) - -#define sql_create_complete_24(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20, T21, I21, N21, O21, T22, I22, N22, O22, T23, I23, N23, O23, T24, I24, N24, O24) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20,\ - NAME##_##I21,\ - NAME##_##I22,\ - NAME##_##I23,\ - NAME##_##I24 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23;\ - T24 I24; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, 0, 0)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, 0, 0)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 ,\ - N21 ,\ - N22 ,\ - N23 ,\ - N24 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(24, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(24, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(24, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(24, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(24, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(24, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.manip << obj.obj->I23 << obj.delem;\ - s << obj.manip << obj.obj->I24; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19] << obj.delem;\ - s << obj.manip << obj.obj->names[20] << obj.delem;\ - s << obj.manip << obj.obj->names[21] << obj.delem;\ - s << obj.manip << obj.obj->names[22] << obj.delem;\ - s << obj.manip << obj.obj->names[23]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23 << obj.delem;\ - s << obj.obj->names[23] << obj.comp << obj.manip << obj.obj->I24; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I23;\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I24;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[20];\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[21];\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[22];\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[23];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23;\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[23] << obj.comp << obj.manip << obj.obj->I24;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23));\ - s->I24 = static_cast(row.at(O24));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, I24, 0 ) - -#define sql_create_basic_24(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24) \ - sql_create_basic_c_order_24(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19, T21, I21, 20, T22, I22, 21, T23, I23, 22, T24, I24, 23) - -#define sql_create_24(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24) \ - sql_create_complete_24(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19, T21, I21, #I21, 20, T22, I22, #I22, 21, T23, I23, #I23, 22, T24, I24, #I24, 23) \ - -#define sql_create_c_order_24(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23, T24, I24, O24) \ - sql_create_complete_24(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20, T21, I21, #I21, O21, T22, I22, #I22, O22, T23, I23, #I23, O23, T24, I24, #I24, O24) - -#define sql_create_c_names_24(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20, T21, I21, N21, T22, I22, N22, T23, I23, N23, T24, I24, N24) \ - sql_create_complete_24(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19, T21, I21, N21, 20, T22, I22, N22, 21, T23, I23, N23, 22, T24, I24, N24, 23) - -// --------------------------------------------------- -// End Create 24 -// --------------------------------------------------- - -// --------------------------------------------------- -// Begin Create 25 -// --------------------------------------------------- -#define sql_create_basic_c_order_25(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23, T24, I24, O24, T25, I25, O25)\ - struct NAME; \ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23;\ - T24 I24;\ - T25 I25; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, T25, I25)\ - }; \ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23));\ - s->I24 = static_cast(row.at(O24));\ - s->I25 = static_cast(row.at(O25)); \ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);} \ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, I24, I25 ) - -#define sql_create_complete_25(NAME, CMP, CONTR, T1, I1, N1, O1, T2, I2, N2, O2, T3, I3, N3, O3, T4, I4, N4, O4, T5, I5, N5, O5, T6, I6, N6, O6, T7, I7, N7, O7, T8, I8, N8, O8, T9, I9, N9, O9, T10, I10, N10, O10, T11, I11, N11, O11, T12, I12, N12, O12, T13, I13, N13, O13, T14, I14, N14, O14, T15, I15, N15, O15, T16, I16, N16, O16, T17, I17, N17, O17, T18, I18, N18, O18, T19, I19, N19, O19, T20, I20, N20, O20, T21, I21, N21, O21, T22, I22, N22, O22, T23, I23, N23, O23, T24, I24, N24, O24, T25, I25, N25, O25) \ - struct NAME; \ - enum NAME##_enum { \ - NAME##_##I1,\ - NAME##_##I2,\ - NAME##_##I3,\ - NAME##_##I4,\ - NAME##_##I5,\ - NAME##_##I6,\ - NAME##_##I7,\ - NAME##_##I8,\ - NAME##_##I9,\ - NAME##_##I10,\ - NAME##_##I11,\ - NAME##_##I12,\ - NAME##_##I13,\ - NAME##_##I14,\ - NAME##_##I15,\ - NAME##_##I16,\ - NAME##_##I17,\ - NAME##_##I18,\ - NAME##_##I19,\ - NAME##_##I20,\ - NAME##_##I21,\ - NAME##_##I22,\ - NAME##_##I23,\ - NAME##_##I24,\ - NAME##_##I25 \ - ,NAME##_NULL \ - }; \ - template \ - class NAME##_value_list { \ - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_##field_list {\ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */\ - public: \ - const NAME *obj; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) \ - : obj(o), delem(d), manip(m) {} \ - };\ - template \ - class NAME##_equal_list { \ - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */\ - public: \ - const NAME *obj;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public: \ - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) \ - : obj(o), delem(d), comp(c), manip(m) {}\ - };\ - template \ - class NAME##_cus_value_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_value_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_value_list () {if (del_vector) delete include;} \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25);\ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25); \ - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i)\ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_field_list { \ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_field_list&); */\ - public:\ - const NAME *obj; \ - std::vector *include; \ - bool del_vector; \ - mysqlpp::cchar *delem;\ - Manip manip;\ - public: \ - ~NAME##_cus_field_list () {if (del_vector) delete include;} \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25); \ - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), manip(m) {}\ - };\ - template \ - class NAME##_cus_equal_list {\ - /* friend std::ostream& operator << <> (std::ostream&, \ - const NAME##_cus_equal_list&); */\ - public:\ - const NAME *obj;\ - std::vector *include;\ - bool del_vector;\ - mysqlpp::cchar *delem;\ - mysqlpp::cchar *comp;\ - Manip manip;\ - public:\ - ~NAME##_##cus_equal_list () {if (del_vector) delete include;}\ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25); \ - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) \ - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {}\ - };\ - template int sql_compare_##NAME (const NAME &, const NAME &);\ - struct NAME { \ - T1 I1;\ - T2 I2;\ - T3 I3;\ - T4 I4;\ - T5 I5;\ - T6 I6;\ - T7 I7;\ - T8 I8;\ - T9 I9;\ - T10 I10;\ - T11 I11;\ - T12 I12;\ - T13 I13;\ - T14 I14;\ - T15 I15;\ - T16 I16;\ - T17 I17;\ - T18 I18;\ - T19 I19;\ - T20 I20;\ - T21 I21;\ - T22 I22;\ - T23 I23;\ - T24 I24;\ - T25 I25; \ - NAME () {} \ - NAME (const mysqlpp::Row &row);\ - void set (const mysqlpp::Row &row);\ - sql_compare_define_##CMP(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, T25, I25)\ - sql_construct_define_##CONTR(NAME, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, T25, I25)\ - static const char *names[];\ - static const char *_table;\ - static const char *& table() {return _table;}\ - NAME##_value_list value_list() const {\ - return value_list(",", mysqlpp::quote);}\ - NAME##_value_list value_list(mysqlpp::cchar *d) const {\ - return value_list(d, mysqlpp::quote);}\ - template \ - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_field_list field_list() const {\ - return field_list(",", mysqlpp::do_nothing);}\ - NAME##_field_list field_list(mysqlpp::cchar *d) const {\ - return field_list(d, mysqlpp::do_nothing);}\ - template \ - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; \ - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", \ - mysqlpp::cchar *c = " = ") const{\ - return equal_list(d, c, mysqlpp::quote);}\ - template \ - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; \ - /* cus_data */\ - NAME##_cus_value_list value_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_value_list value_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return value_list(",", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_value_list value_list(std::vector *i) const {\ - return value_list(",", mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const {\ - return value_list(",", mysqlpp::quote, sc);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return value_list(d, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return value_list(d, mysqlpp::quote, i);\ - }\ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return value_list(d, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const; \ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus field */\ - NAME##_cus_field_list field_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_field_list field_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return field_list(",", mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_field_list field_list(std::vector *i) const {\ - return field_list(",", mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const\ - {\ - return field_list(",", mysqlpp::do_nothing, sc);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return field_list(d, mysqlpp::do_nothing, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return field_list(d, mysqlpp::do_nothing, i);\ - }\ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return field_list(d, mysqlpp::do_nothing, sc);\ - }\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const; \ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const;\ - template \ - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - /* cus equal */\ - NAME##_cus_equal_list equal_list(bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return equal_list(",", " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(std::vector *i) const {\ - return equal_list(",", " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const {\ - return equal_list(",", " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return equal_list(d, " = ", mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - std::vector *i) const {\ - return equal_list(d, " = ", mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, \ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, " = ", mysqlpp::quote, sc);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const {\ - return equal_list(d, c, mysqlpp::quote, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - std::vector *i) const {\ - return equal_list(d, c, mysqlpp::quote, i);\ - }\ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c,\ - mysqlpp::sql_cmp_type sc) const {\ - return equal_list(d, c, mysqlpp::quote, sc);\ - }\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - bool i1, bool i2 = false, bool i3 = false, bool i4 = false, bool i5 = false, bool i6 = false, bool i7 = false, bool i8 = false, bool i9 = false, bool i10 = false, bool i11 = false, bool i12 = false, bool i13 = false, bool i14 = false, bool i15 = false, bool i16 = false, bool i17 = false, bool i18 = false, bool i19 = false, bool i20 = false, bool i21 = false, bool i22 = false, bool i23 = false, bool i24 = false, bool i25 = false) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2 = NAME##_NULL, NAME##_enum i3 = NAME##_NULL, NAME##_enum i4 = NAME##_NULL, NAME##_enum i5 = NAME##_NULL, NAME##_enum i6 = NAME##_NULL, NAME##_enum i7 = NAME##_NULL, NAME##_enum i8 = NAME##_NULL, NAME##_enum i9 = NAME##_NULL, NAME##_enum i10 = NAME##_NULL, NAME##_enum i11 = NAME##_NULL, NAME##_enum i12 = NAME##_NULL, NAME##_enum i13 = NAME##_NULL, NAME##_enum i14 = NAME##_NULL, NAME##_enum i15 = NAME##_NULL, NAME##_enum i16 = NAME##_NULL, NAME##_enum i17 = NAME##_NULL, NAME##_enum i18 = NAME##_NULL, NAME##_enum i19 = NAME##_NULL, NAME##_enum i20 = NAME##_NULL, NAME##_enum i21 = NAME##_NULL, NAME##_enum i22 = NAME##_NULL, NAME##_enum i23 = NAME##_NULL, NAME##_enum i24 = NAME##_NULL, NAME##_enum i25 = NAME##_NULL) const; \ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - std::vector *i) const;\ - template \ - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - mysqlpp::sql_cmp_type sc) const;\ - }; \ - MYSQLPP_SSQLS_EXPAND(\ - const char *NAME::names[] = { \ - N1 ,\ - N2 ,\ - N3 ,\ - N4 ,\ - N5 ,\ - N6 ,\ - N7 ,\ - N8 ,\ - N9 ,\ - N10 ,\ - N11 ,\ - N12 ,\ - N13 ,\ - N14 ,\ - N15 ,\ - N16 ,\ - N17 ,\ - N18 ,\ - N19 ,\ - N20 ,\ - N21 ,\ - N22 ,\ - N23 ,\ - N24 ,\ - N25 \ - }; \ - const char *NAME::_table = #NAME ;\ - )\ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) \ - { \ - delem = d;\ - manip = m;\ - del_vector = true;\ - obj = o; \ - include = new std::vector(25, false);\ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - if (i25) (*include)[24]=true;\ - } \ - template \ - NAME##_cus_value_list::NAME##_cus_value_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(25, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - if (i25 == NAME##_NULL) return;\ - (*include)[i25]=true;\ - }\ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) {\ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(25, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - if (i25) (*include)[24]=true;\ - } \ - template \ - NAME##_cus_field_list::NAME##_cus_field_list\ - (const NAME *o, mysqlpp::cchar *d, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) { \ - delem = d;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(25, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - if (i25 == NAME##_NULL) return;\ - (*include)[i25]=true;\ - }\ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(25, false); \ - if (i1) (*include)[0]=true;\ - if (i2) (*include)[1]=true;\ - if (i3) (*include)[2]=true;\ - if (i4) (*include)[3]=true;\ - if (i5) (*include)[4]=true;\ - if (i6) (*include)[5]=true;\ - if (i7) (*include)[6]=true;\ - if (i8) (*include)[7]=true;\ - if (i9) (*include)[8]=true;\ - if (i10) (*include)[9]=true;\ - if (i11) (*include)[10]=true;\ - if (i12) (*include)[11]=true;\ - if (i13) (*include)[12]=true;\ - if (i14) (*include)[13]=true;\ - if (i15) (*include)[14]=true;\ - if (i16) (*include)[15]=true;\ - if (i17) (*include)[16]=true;\ - if (i18) (*include)[17]=true;\ - if (i19) (*include)[18]=true;\ - if (i20) (*include)[19]=true;\ - if (i21) (*include)[20]=true;\ - if (i22) (*include)[21]=true;\ - if (i23) (*include)[22]=true;\ - if (i24) (*include)[23]=true;\ - if (i25) (*include)[24]=true;\ - } \ - template \ - NAME##_cus_equal_list::NAME##_cus_equal_list\ - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) { \ - delem = d;\ - comp = c;\ - manip = m;\ - del_vector = true; \ - obj = o; \ - include = new std::vector(25, false); \ - if (i1 == NAME##_NULL) return;\ - (*include)[i1]=true;\ - if (i2 == NAME##_NULL) return;\ - (*include)[i2]=true;\ - if (i3 == NAME##_NULL) return;\ - (*include)[i3]=true;\ - if (i4 == NAME##_NULL) return;\ - (*include)[i4]=true;\ - if (i5 == NAME##_NULL) return;\ - (*include)[i5]=true;\ - if (i6 == NAME##_NULL) return;\ - (*include)[i6]=true;\ - if (i7 == NAME##_NULL) return;\ - (*include)[i7]=true;\ - if (i8 == NAME##_NULL) return;\ - (*include)[i8]=true;\ - if (i9 == NAME##_NULL) return;\ - (*include)[i9]=true;\ - if (i10 == NAME##_NULL) return;\ - (*include)[i10]=true;\ - if (i11 == NAME##_NULL) return;\ - (*include)[i11]=true;\ - if (i12 == NAME##_NULL) return;\ - (*include)[i12]=true;\ - if (i13 == NAME##_NULL) return;\ - (*include)[i13]=true;\ - if (i14 == NAME##_NULL) return;\ - (*include)[i14]=true;\ - if (i15 == NAME##_NULL) return;\ - (*include)[i15]=true;\ - if (i16 == NAME##_NULL) return;\ - (*include)[i16]=true;\ - if (i17 == NAME##_NULL) return;\ - (*include)[i17]=true;\ - if (i18 == NAME##_NULL) return;\ - (*include)[i18]=true;\ - if (i19 == NAME##_NULL) return;\ - (*include)[i19]=true;\ - if (i20 == NAME##_NULL) return;\ - (*include)[i20]=true;\ - if (i21 == NAME##_NULL) return;\ - (*include)[i21]=true;\ - if (i22 == NAME##_NULL) return;\ - (*include)[i22]=true;\ - if (i23 == NAME##_NULL) return;\ - (*include)[i23]=true;\ - if (i24 == NAME##_NULL) return;\ - (*include)[i24]=true;\ - if (i25 == NAME##_NULL) return;\ - (*include)[i25]=true;\ - }\ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { \ - s << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.manip << obj.obj->I23 << obj.delem;\ - s << obj.manip << obj.obj->I24 << obj.delem;\ - s << obj.manip << obj.obj->I25; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { \ - s << obj.manip << obj.obj->names[0] << obj.delem;\ - s << obj.manip << obj.obj->names[1] << obj.delem;\ - s << obj.manip << obj.obj->names[2] << obj.delem;\ - s << obj.manip << obj.obj->names[3] << obj.delem;\ - s << obj.manip << obj.obj->names[4] << obj.delem;\ - s << obj.manip << obj.obj->names[5] << obj.delem;\ - s << obj.manip << obj.obj->names[6] << obj.delem;\ - s << obj.manip << obj.obj->names[7] << obj.delem;\ - s << obj.manip << obj.obj->names[8] << obj.delem;\ - s << obj.manip << obj.obj->names[9] << obj.delem;\ - s << obj.manip << obj.obj->names[10] << obj.delem;\ - s << obj.manip << obj.obj->names[11] << obj.delem;\ - s << obj.manip << obj.obj->names[12] << obj.delem;\ - s << obj.manip << obj.obj->names[13] << obj.delem;\ - s << obj.manip << obj.obj->names[14] << obj.delem;\ - s << obj.manip << obj.obj->names[15] << obj.delem;\ - s << obj.manip << obj.obj->names[16] << obj.delem;\ - s << obj.manip << obj.obj->names[17] << obj.delem;\ - s << obj.manip << obj.obj->names[18] << obj.delem;\ - s << obj.manip << obj.obj->names[19] << obj.delem;\ - s << obj.manip << obj.obj->names[20] << obj.delem;\ - s << obj.manip << obj.obj->names[21] << obj.delem;\ - s << obj.manip << obj.obj->names[22] << obj.delem;\ - s << obj.manip << obj.obj->names[23] << obj.delem;\ - s << obj.manip << obj.obj->names[24]; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1 << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2 << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3 << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4 << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5 << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6 << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7 << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8 << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9 << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10 << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11 << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12 << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13 << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14 << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15 << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16 << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17 << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18 << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19 << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20 << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21 << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22 << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23 << obj.delem;\ - s << obj.obj->names[23] << obj.comp << obj.manip << obj.obj->I24 << obj.delem;\ - s << obj.obj->names[24] << obj.comp << obj.manip << obj.obj->I25; \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I23;\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I24;\ - before = true; \ - } \ - if ((*obj.include)[24]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->I25;\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.manip << obj.obj->names[0];\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[1];\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[2];\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[3];\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[4];\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[5];\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[6];\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[7];\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[8];\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[9];\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[10];\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[11];\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[12];\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[13];\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[14];\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[15];\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[16];\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[17];\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[18];\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[19];\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[20];\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[21];\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[22];\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[23];\ - before = true; \ - } \ - if ((*obj.include)[24]) { \ - if (before) s << obj.delem;\ - s << obj.manip << obj.obj->names[24];\ - } \ - return s; \ - } \ - template \ - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { \ - bool before = false; \ - if ((*obj.include)[0]) { \ - s << obj.obj->names[0] << obj.comp << obj.manip << obj.obj->I1;\ - before = true; \ - } \ - if ((*obj.include)[1]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[1] << obj.comp << obj.manip << obj.obj->I2;\ - before = true; \ - } \ - if ((*obj.include)[2]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[2] << obj.comp << obj.manip << obj.obj->I3;\ - before = true; \ - } \ - if ((*obj.include)[3]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[3] << obj.comp << obj.manip << obj.obj->I4;\ - before = true; \ - } \ - if ((*obj.include)[4]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[4] << obj.comp << obj.manip << obj.obj->I5;\ - before = true; \ - } \ - if ((*obj.include)[5]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[5] << obj.comp << obj.manip << obj.obj->I6;\ - before = true; \ - } \ - if ((*obj.include)[6]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[6] << obj.comp << obj.manip << obj.obj->I7;\ - before = true; \ - } \ - if ((*obj.include)[7]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[7] << obj.comp << obj.manip << obj.obj->I8;\ - before = true; \ - } \ - if ((*obj.include)[8]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[8] << obj.comp << obj.manip << obj.obj->I9;\ - before = true; \ - } \ - if ((*obj.include)[9]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[9] << obj.comp << obj.manip << obj.obj->I10;\ - before = true; \ - } \ - if ((*obj.include)[10]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[10] << obj.comp << obj.manip << obj.obj->I11;\ - before = true; \ - } \ - if ((*obj.include)[11]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[11] << obj.comp << obj.manip << obj.obj->I12;\ - before = true; \ - } \ - if ((*obj.include)[12]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[12] << obj.comp << obj.manip << obj.obj->I13;\ - before = true; \ - } \ - if ((*obj.include)[13]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[13] << obj.comp << obj.manip << obj.obj->I14;\ - before = true; \ - } \ - if ((*obj.include)[14]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[14] << obj.comp << obj.manip << obj.obj->I15;\ - before = true; \ - } \ - if ((*obj.include)[15]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[15] << obj.comp << obj.manip << obj.obj->I16;\ - before = true; \ - } \ - if ((*obj.include)[16]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[16] << obj.comp << obj.manip << obj.obj->I17;\ - before = true; \ - } \ - if ((*obj.include)[17]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[17] << obj.comp << obj.manip << obj.obj->I18;\ - before = true; \ - } \ - if ((*obj.include)[18]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[18] << obj.comp << obj.manip << obj.obj->I19;\ - before = true; \ - } \ - if ((*obj.include)[19]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[19] << obj.comp << obj.manip << obj.obj->I20;\ - before = true; \ - } \ - if ((*obj.include)[20]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[20] << obj.comp << obj.manip << obj.obj->I21;\ - before = true; \ - } \ - if ((*obj.include)[21]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[21] << obj.comp << obj.manip << obj.obj->I22;\ - before = true; \ - } \ - if ((*obj.include)[22]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[22] << obj.comp << obj.manip << obj.obj->I23;\ - before = true; \ - } \ - if ((*obj.include)[23]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[23] << obj.comp << obj.manip << obj.obj->I24;\ - before = true; \ - } \ - if ((*obj.include)[24]) { \ - if (before) s << obj.delem;\ - s << obj.obj->names[24] << obj.comp << obj.manip << obj.obj->I25;\ - } \ - return s; \ - } \ - template \ - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_value_list (this, d, m); \ - } \ - template \ - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { \ - return NAME##_field_list (this, d, m); \ - } \ - template \ - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { \ - return NAME##_equal_list (this, d, c, m); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) const {\ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) const { \ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - bool i1, bool i2, bool i3, bool i4, bool i5, bool i6, bool i7, bool i8, bool i9, bool i10, bool i11, bool i12, bool i13, bool i14, bool i15, bool i16, bool i17, bool i18, bool i19, bool i20, bool i21, bool i22, bool i23, bool i24, bool i25) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) const { \ - return NAME##_cus_value_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) const {\ - return NAME##_cus_field_list (this, d, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, \ - NAME##_enum i1, NAME##_enum i2, NAME##_enum i3, NAME##_enum i4, NAME##_enum i5, NAME##_enum i6, NAME##_enum i7, NAME##_enum i8, NAME##_enum i9, NAME##_enum i10, NAME##_enum i11, NAME##_enum i12, NAME##_enum i13, NAME##_enum i14, NAME##_enum i15, NAME##_enum i16, NAME##_enum i17, NAME##_enum i18, NAME##_enum i19, NAME##_enum i20, NAME##_enum i21, NAME##_enum i22, NAME##_enum i23, NAME##_enum i24, NAME##_enum i25) const { \ - return NAME##_cus_equal_list (this, d, c, m, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23, i24, i25); \ - } \ - template \ - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_value_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_field_list (this, d, m, i);\ - }\ - template \ - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m,\ - std::vector *i) const {\ - return NAME##_cus_equal_list (this, d, c, m, i);\ - }\ - template \ - inline NAME##_cus_value_list \ - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, value, NUM);\ - }\ - template \ - inline NAME##_cus_field_list \ - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_def_##CMP (NAME, field, NUM);\ - }\ - template \ - inline NAME##_cus_equal_list \ - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const {\ - sql_compare_type_defe_##CMP (NAME, equal, NUM);\ - }\ - template \ - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { \ - s->I1 = static_cast(row.at(O1));\ - s->I2 = static_cast(row.at(O2));\ - s->I3 = static_cast(row.at(O3));\ - s->I4 = static_cast(row.at(O4));\ - s->I5 = static_cast(row.at(O5));\ - s->I6 = static_cast(row.at(O6));\ - s->I7 = static_cast(row.at(O7));\ - s->I8 = static_cast(row.at(O8));\ - s->I9 = static_cast(row.at(O9));\ - s->I10 = static_cast(row.at(O10));\ - s->I11 = static_cast(row.at(O11));\ - s->I12 = static_cast(row.at(O12));\ - s->I13 = static_cast(row.at(O13));\ - s->I14 = static_cast(row.at(O14));\ - s->I15 = static_cast(row.at(O15));\ - s->I16 = static_cast(row.at(O16));\ - s->I17 = static_cast(row.at(O17));\ - s->I18 = static_cast(row.at(O18));\ - s->I19 = static_cast(row.at(O19));\ - s->I20 = static_cast(row.at(O20));\ - s->I21 = static_cast(row.at(O21));\ - s->I22 = static_cast(row.at(O22));\ - s->I23 = static_cast(row.at(O23));\ - s->I24 = static_cast(row.at(O24));\ - s->I25 = static_cast(row.at(O25));\ - } \ - inline NAME::NAME (const mysqlpp::Row &row) \ - {populate_##NAME(this, row);}\ - inline void NAME::set (const mysqlpp::Row &row)\ - {populate_##NAME(this, row);}\ - sql_COMPARE__##CMP(NAME, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16, I17, I18, I19, I20, I21, I22, I23, I24, I25 ) - -#define sql_create_basic_25(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, T25, I25) \ - sql_create_basic_c_order_25(NAME, CMP, CONTR, T1, I1, 0, T2, I2, 1, T3, I3, 2, T4, I4, 3, T5, I5, 4, T6, I6, 5, T7, I7, 6, T8, I8, 7, T9, I9, 8, T10, I10, 9, T11, I11, 10, T12, I12, 11, T13, I13, 12, T14, I14, 13, T15, I15, 14, T16, I16, 15, T17, I17, 16, T18, I18, 17, T19, I19, 18, T20, I20, 19, T21, I21, 20, T22, I22, 21, T23, I23, 22, T24, I24, 23, T25, I25, 24) - -#define sql_create_25(NAME, CMP, CONTR, T1, I1, T2, I2, T3, I3, T4, I4, T5, I5, T6, I6, T7, I7, T8, I8, T9, I9, T10, I10, T11, I11, T12, I12, T13, I13, T14, I14, T15, I15, T16, I16, T17, I17, T18, I18, T19, I19, T20, I20, T21, I21, T22, I22, T23, I23, T24, I24, T25, I25) \ - sql_create_complete_25(NAME, CMP, CONTR, T1, I1, #I1, 0, T2, I2, #I2, 1, T3, I3, #I3, 2, T4, I4, #I4, 3, T5, I5, #I5, 4, T6, I6, #I6, 5, T7, I7, #I7, 6, T8, I8, #I8, 7, T9, I9, #I9, 8, T10, I10, #I10, 9, T11, I11, #I11, 10, T12, I12, #I12, 11, T13, I13, #I13, 12, T14, I14, #I14, 13, T15, I15, #I15, 14, T16, I16, #I16, 15, T17, I17, #I17, 16, T18, I18, #I18, 17, T19, I19, #I19, 18, T20, I20, #I20, 19, T21, I21, #I21, 20, T22, I22, #I22, 21, T23, I23, #I23, 22, T24, I24, #I24, 23, T25, I25, #I25, 24) \ - -#define sql_create_c_order_25(NAME, CMP, CONTR, T1, I1, O1, T2, I2, O2, T3, I3, O3, T4, I4, O4, T5, I5, O5, T6, I6, O6, T7, I7, O7, T8, I8, O8, T9, I9, O9, T10, I10, O10, T11, I11, O11, T12, I12, O12, T13, I13, O13, T14, I14, O14, T15, I15, O15, T16, I16, O16, T17, I17, O17, T18, I18, O18, T19, I19, O19, T20, I20, O20, T21, I21, O21, T22, I22, O22, T23, I23, O23, T24, I24, O24, T25, I25, O25) \ - sql_create_complete_25(NAME, CMP, CONTR, T1, I1, #I1, O1, T2, I2, #I2, O2, T3, I3, #I3, O3, T4, I4, #I4, O4, T5, I5, #I5, O5, T6, I6, #I6, O6, T7, I7, #I7, O7, T8, I8, #I8, O8, T9, I9, #I9, O9, T10, I10, #I10, O10, T11, I11, #I11, O11, T12, I12, #I12, O12, T13, I13, #I13, O13, T14, I14, #I14, O14, T15, I15, #I15, O15, T16, I16, #I16, O16, T17, I17, #I17, O17, T18, I18, #I18, O18, T19, I19, #I19, O19, T20, I20, #I20, O20, T21, I21, #I21, O21, T22, I22, #I22, O22, T23, I23, #I23, O23, T24, I24, #I24, O24, T25, I25, #I25, O25) - -#define sql_create_c_names_25(NAME, CMP, CONTR, T1, I1, N1, T2, I2, N2, T3, I3, N3, T4, I4, N4, T5, I5, N5, T6, I6, N6, T7, I7, N7, T8, I8, N8, T9, I9, N9, T10, I10, N10, T11, I11, N11, T12, I12, N12, T13, I13, N13, T14, I14, N14, T15, I15, N15, T16, I16, N16, T17, I17, N17, T18, I18, N18, T19, I19, N19, T20, I20, N20, T21, I21, N21, T22, I22, N22, T23, I23, N23, T24, I24, N24, T25, I25, N25) \ - sql_create_complete_25(NAME, CMP, CONTR, T1, I1, N1, 0, T2, I2, N2, 1, T3, I3, N3, 2, T4, I4, N4, 3, T5, I5, N5, 4, T6, I6, N6, 5, T7, I7, N7, 6, T8, I8, N8, 7, T9, I9, N9, 8, T10, I10, N10, 9, T11, I11, N11, 10, T12, I12, N12, 11, T13, I13, N13, 12, T14, I14, N14, 13, T15, I15, N15, 14, T16, I16, N16, 15, T17, I17, N17, 16, T18, I18, N18, 17, T19, I19, N19, 18, T20, I20, N20, 19, T21, I21, N21, 20, T22, I22, N22, 21, T23, I23, N23, 22, T24, I24, N24, 23, T25, I25, N25, 24) - -// --------------------------------------------------- -// End Create 25 -// --------------------------------------------------- - DELETED lib/custom.h Index: lib/custom.h ================================================================== --- lib/custom.h +++ /dev/null @@ -1,98 +0,0 @@ - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// This file is generated by the Perl script custom.pl. Please do -// not modify this file directly. Change the script instead. -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -#ifndef MYSQLPP_CUSTOM_H -#define MYSQLPP_CUSTOM_H - -#include "common.h" -#include "tiny_int.h" - -#include - -#if defined(_MSC_VER) && (_MSC_VER < 1400) -# error Please run the MySQL++ script lib/custom.pl with the -v compatibility flag. -#endif - -#ifdef MYSQLPP_SSQLS_NO_STATICS -# define MYSQLPP_SSQLS_EXPAND(...) -#else -# define MYSQLPP_SSQLS_EXPAND(...) __VA_ARGS__ -#endif - -namespace mysqlpp { - -enum sql_dummy_type {sql_dummy}; - -inline int sql_cmp(const std::string &a, const std::string &b) { - return a.compare(b); -} - -inline int sql_cmp(char a,char b) { - return a-b; -} - -inline int sql_cmp(unsigned char a,unsigned char b) { - return a-b; -} - -inline int sql_cmp(tiny_int a,tiny_int b) { - return a-b; -} - -inline int sql_cmp(int a,int b) { - return a-b; -} - -inline int sql_cmp(unsigned int a,unsigned int b) { - return a-b; -} - -inline int sql_cmp(short int a,short int b) { - return a-b; -} - -inline int sql_cmp(unsigned short int a,unsigned short int b) { - return a-b; -} - -inline int sql_cmp(unsigned long a,unsigned long b) { - return a-b; -} - -inline int sql_cmp(long a,long b) { - return a-b; -} - -inline int sql_cmp(double a,double b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} - -inline int sql_cmp(float a,float b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} - -inline int sql_cmp(longlong a,longlong b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} - -inline int sql_cmp(ulonglong a,ulonglong b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} - -#include "custom-macros.h" - -} // end namespace mysqlpp - -#endif - DELETED lib/custom.pl Index: lib/custom.pl ================================================================== --- lib/custom.pl +++ /dev/null @@ -1,924 +0,0 @@ -#!/usr/bin/perl -w - -######################################################################## -# custom.pl - Generates custom.h and custom-macros.h, as these files -# contain many near-duplicate classes, varying only in the number of -# SQL table columns they support. -# -# Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by -# MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. -# Others may also hold copyrights on code in this file. See the CREDITS -# 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 -######################################################################## - - -# This is the limit on the number of SSQLS data members. Higher values -# will make custom-macros.h exponentially larger, increase compile -# times, and possibly even expose limits in your compiler. Increase it -# only if you must. -my $max_data_members = 25; - - -# No user-serviceable parts below. - -use strict; -use Getopt::Std; - -our ($opt_v); -getopts('v') or die "usage: custom.pl [-v]\n"; - -open (OUT0, ">custom.h"); -open (OUT, ">custom-macros.h"); - -print OUT0 << "---"; - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// This file is generated by the Perl script custom.pl. Please do -// not modify this file directly. Change the script instead. -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -#ifndef MYSQLPP_CUSTOM_H -#define MYSQLPP_CUSTOM_H - -#include "common.h" -#include "tiny_int.h" - -#include ---- - -my ($suppress_statics_start, $suppress_statics_end) = ('', ''); -unless ($opt_v) { - print OUT0 << "---"; - -#if defined(_MSC_VER) && (_MSC_VER < 1400) -# error Please run the MySQL++ script lib/custom.pl with the -v compatibility flag. -#endif - -#ifdef MYSQLPP_SSQLS_NO_STATICS -# define MYSQLPP_SSQLS_EXPAND(...) -#else -# define MYSQLPP_SSQLS_EXPAND(...) __VA_ARGS__ -#endif - ---- - $suppress_statics_start = 'MYSQLPP_SSQLS_EXPAND('; - $suppress_statics_end = ')'; -} - -print OUT0 << "---"; -namespace mysqlpp { - -enum sql_dummy_type {sql_dummy}; - -inline int sql_cmp(const std::string &a, const std::string &b) { - return a.compare(b); -} ---- - -my @types = ("char", "unsigned char", "tiny_int", "int", "unsigned int", - "short int", "unsigned short int", "unsigned long", "long"); -foreach my $type (@types) { - print OUT0 << "---"; - -inline int sql_cmp($type a,$type b) { - return a-b; -} ---- -} - -@types = ("double", "float"); -foreach my $type (@types) { - print OUT0 << "---"; - -inline int sql_cmp($type a,$type b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} ---- -} - -@types = ("longlong", "ulonglong"); -foreach my $type (@types) { - print OUT0 << "---"; - -inline int sql_cmp($type a,$type b) { - if (a == b) return 0; - if (a < b) return -1; - return 1; -} ---- -} - -print OUT0 << "---"; - -#include "custom-macros.h" - -} // end namespace mysqlpp - -#endif - ---- - -print OUT << "---"; - -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// This file is generated by the Perl script custom.pl. Please do -// not modify this file directly. Change the script instead. -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -// --------------------------------------------------- -// Begin Mandatory Compare -// --------------------------------------------------- - -#define sql_compare_define(NAME) \\ - bool operator == (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) == 0;} \\ - bool operator != (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) != 0;} \\ - bool operator > (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) > 0;} \\ - bool operator < (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) < 0;} \\ - bool operator >= (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) >= 0;} \\ - bool operator <= (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other) <= 0;} \\ - int cmp (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other);} \\ - int compare (const NAME &other) const \\ - {return sql_compare_##NAME(*this,other);} ---- - -my ($parm0, $parm1); - -foreach my $j (1..$max_data_members) { - $parm0 .= "T$j, C$j"; - $parm0 .= ", " unless $j == $max_data_members; - $parm1 .= "C$j"; - $parm1 .= ", " unless $j == $max_data_members; -} - -print OUT << "---"; - -#define sql_compare_define_0(NAME, $parm0) - -#define sql_construct_define_0(NAME, $parm0) - -#define sql_COMPARE__0(NAME, $parm1) - -#define sql_compare_type_def_0(NAME, WHAT, NUM) \\ - sql_compare_type_def_##NUM (NAME, WHAT, NUM) - -#define sql_compare_type_defe_0(NAME, WHAT, NUM) \\ - sql_compare_type_defe_##NUM (NAME, WHAT, NUM) - -// --------------------------------------------------- -// End Mandatory Compare -// --------------------------------------------------- ---- - - -foreach my $i (1..$max_data_members) { - my ($compr, $define, $compp, $set, $parm2); - $compr = ""; $parm2 = ""; $define = ""; - $compr = " int cmp; \\\n" unless $i == 1; - $compp = ""; - $set = ""; - foreach my $j (1..$i) { - if ($j != $i) { - $compr .= " cmp = mysqlpp::sql_cmp(x.C$j , y.C$j ); \\\n"; - $compr .= " if (cmp) return cmp; \\\n"; - } - - $compr .= " return mysqlpp::sql_cmp(x.C$j , y.C$j );" if $j == $i; - $parm2 .= "const T$j &p$j"; - $parm2 .= ", " unless $j == $i; - $define.= "C$j (p$j)"; - $define.= ", " unless $j == $i; - $set .= " C$j = p$j;\\\n"; - $compp .= "true"; - $compp .= ", " unless $j == $i; - } - print OUT << "---"; - -// --------------------------------------------------- -// Begin Compare $i -// --------------------------------------------------- - -#define sql_compare_define_$i(NAME, $parm0) \\ - NAME ($parm2) : $define {} \\ - void set ($parm2) { \\ -$set \\ - } \\ - sql_compare_define(NAME) - -#define sql_construct_define_$i(NAME, $parm0) \\ - void set ($parm2) { \\ -$set \\ - } \\ - NAME ($parm2) : $define {} - -#define sql_compare_type_def_$i(NAME, WHAT, NUM) \\ - return WHAT##_list(d, m, $compp) - -#define sql_compare_type_defe_$i(NAME, WHAT, NUM) \\ - return WHAT##_list(d, c, m, $compp) - -#define sql_COMPARE__$i(NAME, $parm1) \\ - template \\ - int sql_compare_##NAME (const NAME &x, const NAME &y) { \\ -$compr \\ - } \\ - template \\ - int compare (const NAME &x, const NAME &y) { \\ -$compr \\ - } - -// --------------------------------------------------- -// End Compare $i -// --------------------------------------------------- - ---- -} - -print OUT << "---"; ---- - - -foreach my $i (1..$max_data_members) { - my $parm_complete = ""; - my $parm_order = ""; my $parm_order2c = ""; - my $parm_simple = ""; my $parm_simple2c = ""; - my $parm_simple_b = ""; my $parm_simple2c_b = ""; - my $parm_names = ""; my $parm_names2c = ""; - my $defs = ""; my $popul = ""; my $parmc = ""; my $parmC = ""; - my $value_list = ""; my $field_list = ""; my $equal_list = ""; - my $value_list_cus = ""; my $cus_field_list = ""; my $cus_equal_list = ""; - my $create_bool = ""; my $create_list = ""; - my $cusparms1 = ""; my $cusparms2 = ""; my $cusparmsv = ""; - my $cusparms11 = ""; my $cusparms22 = ""; - my $names = "";my $enums = ""; - foreach my $j (1 .. $i) { - $parm_complete .= "T$j, I$j, N$j, O$j"; - $parm_complete .= ", " unless $j == $i; - $parm_order .= "T$j, I$j, O$j"; - $parm_order .= ", " unless $j == $i; - $parm_order2c .= "T$j, I$j, #I$j, O$j"; - $parm_order2c .= ", " unless $j == $i; - $parm_names .= "T$j, I$j, N$j"; - $parm_names .= ", " unless $j == $i; - $parm_names2c .= "T$j, I$j, N$j, ". ($j-1); - $parm_names2c .= ", " unless $j == $i; - $parm_simple .= "T$j, I$j"; - $parm_simple .= ", " unless $j == $i; - $parm_simple2c .= "T$j, I$j, #I$j, ". ($j-1); - $parm_simple2c .= ", " unless $j == $i; - $parm_simple_b .= "T$j, I$j"; - $parm_simple_b .= ", " unless $j == $i; - $parm_simple2c_b .= "T$j, I$j, ". ($j-1); - $parm_simple2c_b .= ", " unless $j == $i; - $defs .= " T$j I$j;"; - $defs .= "\n" unless $j == $i; - $popul .= " s->I$j = static_cast(row.at(O$j));"; - $popul .= "\n" unless $j == $i; - $names .= " N$j "; - $names .= ",\n" unless $j == $i; - $enums .= " NAME##_##I$j"; - $enums .= ",\n" unless $j == $i; - $field_list .= " s << obj.manip << obj.obj->names[".($j-1)."]"; - $field_list .= " << obj.delem;\n" unless $j == $i; - $value_list .= " s << obj.manip << obj.obj->I$j"; - $value_list .= " << obj.delem;\n" unless $j == $i; - $create_bool .= " if (i$j) (*include)[".($j-1)."]=true;\n"; - $create_list .= " if (i$j == NAME##_NULL) return;\n" unless $i == 1; - $create_list .= " (*include)[i$j]=true;\n"; - - $value_list_cus .= " if ((*obj.include)[".($j-1)."]) { \n"; - $value_list_cus .= " if (before) s << obj.delem;\n" unless $j == 1; - $value_list_cus .= " s << obj.manip << obj.obj->I$j;\n"; - $value_list_cus .= " before = true; \n" unless $j == $i; - $value_list_cus .= " } \n"; - - $cus_field_list .= " if ((*obj.include)[".($j-1)."]) { \n"; - $cus_field_list .= " if (before) s << obj.delem;\n" unless $j == 1; - $cus_field_list .= " s << obj.manip << obj.obj->names[".($j-1)."];\n"; - $cus_field_list .= " before = true; \n" unless $j == $i; - $cus_field_list .= " } \n"; - - $cus_equal_list .= " if ((*obj.include)[".($j-1)."]) { \n"; - $cus_equal_list .= " if (before) s << obj.delem;\n" unless $j == 1; - $cus_equal_list .= " s << obj.obj->names[".($j-1)."] << obj.comp"; - $cus_equal_list .= " << obj.manip << obj.obj->I$j;\n"; - $cus_equal_list .= " before = true; \n" unless $j == $i; - $cus_equal_list .= " } \n"; - - $equal_list .= " s << obj.obj->names[".($j-1)."] << obj.comp"; - $equal_list .= " << obj.manip << obj.obj->I$j"; - $equal_list .= " << obj.delem;\n" unless $j == $i; - $cusparms1 .= "bool i$j" if $j == 1; - $cusparms1 .= "bool i$j = false" unless $j == 1; - $cusparms1 .= ", " unless $j == $i; - $cusparms11 .= "bool i$j" ; - $cusparms11 .= ", " unless $j == $i; - $cusparms2 .= "NAME##_enum i$j" if $j == 1; - $cusparms2 .= "NAME##_enum i$j = NAME##_NULL" unless $j == 1; - $cusparms2 .= ", " unless $j == $i; - $cusparms22 .= "NAME##_enum i$j"; - $cusparms22 .= ", " unless $j == $i; - $cusparmsv .= "i$j"; - $cusparmsv .= ", " unless $j == $i; - $parmC .= "T$j, I$j"; - $parmC .= ", " unless $j == $max_data_members; - $parmc .= "I$j"; - $parmc .= ", " unless $j == $max_data_members; - } - foreach my $j ($i+1 .. $max_data_members) { - $parmC .= "0, 0"; - $parmC .= ", " unless $j == $max_data_members; - $parmc .= "0"; - $parmc .= ", " unless $j == $max_data_members; - } - - print OUT << "---"; -// --------------------------------------------------- -// Begin Create $i -// --------------------------------------------------- ---- - my $out = <<"---"; -#define sql_create_basic_c_order_$i(NAME, CMP, CONTR, $parm_order) - - struct NAME; - - template int sql_compare_##NAME (const NAME &, const NAME &); - - struct NAME { -$defs - NAME () {} - NAME (const mysqlpp::Row &row); - sql_compare_define_##CMP(NAME, $parmC) - }; - - template - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { -$popul - } - - inline NAME::NAME (const mysqlpp::Row &row) - {populate_##NAME(this, row);} - - sql_COMPARE__##CMP(NAME, $parmc ) ---- - print OUT &prepare($out); - - $out = <<"---"; -#define sql_create_complete_$i(NAME, CMP, CONTR, $parm_complete) - struct NAME; - - enum NAME##_enum { -$enums - ,NAME##_NULL - }; - - template - class NAME##_value_list { - /*friend std::ostream& operator << <> (std::ostream&, const NAME##_value_list&); */ - public: - const NAME *obj; - mysqlpp::cchar *delem; - Manip manip; - public: - NAME##_value_list (const NAME *o, mysqlpp::cchar *d, Manip m) - : obj(o), delem(d), manip(m) {} - }; - - template - class NAME##_##field_list { - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_field_list&); */ - public: - const NAME *obj; - mysqlpp::cchar *delem; - Manip manip; - public: - NAME##_field_list (const NAME *o, mysqlpp::cchar *d, Manip m) - : obj(o), delem(d), manip(m) {} - }; - - template - class NAME##_equal_list { - /* friend std::ostream& operator << <> (std::ostream&, const NAME##_equal_list&); */ - public: - const NAME *obj; - mysqlpp::cchar *delem; - mysqlpp::cchar *comp; - Manip manip; - public: - NAME##_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) - : obj(o), delem(d), comp(c), manip(m) {} - }; - - template - class NAME##_cus_value_list { - /* friend std::ostream& operator << <> (std::ostream&, - const NAME##_cus_value_list&); */ - public: - const NAME *obj; - std::vector *include; - bool del_vector; - mysqlpp::cchar *delem; - Manip manip; - public: - ~NAME##_cus_value_list () {if (del_vector) delete include;} - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms11); - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms22); - NAME##_cus_value_list (const NAME *o, mysqlpp::cchar *d, Manip m ,std::vector* i) - : obj(o), include(i), del_vector(false), delem(d), manip(m) {} - }; - - template - class NAME##_cus_field_list { - /* friend std::ostream& operator << <> (std::ostream&, - const NAME##_cus_field_list&); */ - public: - const NAME *obj; - std::vector *include; - bool del_vector; - mysqlpp::cchar *delem; - Manip manip; - public: - ~NAME##_cus_field_list () {if (del_vector) delete include;} - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms11); - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms22); - NAME##_cus_field_list (const NAME *o, mysqlpp::cchar *d, Manip m, std::vector *i) - : obj(o), include(i), del_vector(false), delem(d), manip(m) {} - }; - - template - class NAME##_cus_equal_list { - /* friend std::ostream& operator << <> (std::ostream&, - const NAME##_cus_equal_list&); */ - public: - const NAME *obj; - std::vector *include; - bool del_vector; - mysqlpp::cchar *delem; - mysqlpp::cchar *comp; - Manip manip; - public: - ~NAME##_##cus_equal_list () {if (del_vector) delete include;} - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, $cusparms11); - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, $cusparms22); - NAME##_##cus_equal_list (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, std::vector *i) - : obj(o), include(i), del_vector(false), delem(d), comp(c), manip(m) {} - }; - - template int sql_compare_##NAME (const NAME &, const NAME &); - - struct NAME { -$defs - NAME () {} - NAME (const mysqlpp::Row &row); - void set (const mysqlpp::Row &row); - sql_compare_define_##CMP(NAME, $parmC) - sql_construct_define_##CONTR(NAME, $parmC) - static const char *names[]; - static const char *_table; - static const char *& table() {return _table;} - - NAME##_value_list value_list() const { - return value_list(",", mysqlpp::quote);} - NAME##_value_list value_list(mysqlpp::cchar *d) const { - return value_list(d, mysqlpp::quote);} - template - NAME##_value_list value_list(mysqlpp::cchar *d, Manip m) const; - - NAME##_field_list field_list() const { - return field_list(",", mysqlpp::do_nothing);} - NAME##_field_list field_list(mysqlpp::cchar *d) const { - return field_list(d, mysqlpp::do_nothing);} - template - NAME##_field_list field_list(mysqlpp::cchar *d, Manip m) const; - - NAME##_equal_list equal_list(mysqlpp::cchar *d = ",", - mysqlpp::cchar *c = " = ") const{ - return equal_list(d, c, mysqlpp::quote);} - template - NAME##_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const; - - /* cus_data */ - - NAME##_cus_value_list value_list($cusparms1) const { - return value_list(",", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_value_list value_list($cusparms2) const { - return value_list(",", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_value_list value_list(std::vector *i) const { - return value_list(",", mysqlpp::quote, i); - } - NAME##_cus_value_list value_list(mysqlpp::sql_cmp_type sc) const { - return value_list(",", mysqlpp::quote, sc); - } - - NAME##_cus_value_list value_list(mysqlpp::cchar *d, $cusparms1) const { - return value_list(d, mysqlpp::quote, $cusparmsv); - } - NAME##_cus_value_list value_list(mysqlpp::cchar *d, $cusparms2) const { - return value_list(d, mysqlpp::quote, $cusparmsv); - } - NAME##_cus_value_list value_list(mysqlpp::cchar *d, - std::vector *i) const { - return value_list(d, mysqlpp::quote, i); - } - NAME##_cus_value_list value_list(mysqlpp::cchar *d, - mysqlpp::sql_cmp_type sc) const { - return value_list(d, mysqlpp::quote, sc); - } - - template - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, - $cusparms1) const; - template - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, - $cusparms2) const; - template - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, - std::vector *i) const; - template - NAME##_cus_value_list value_list(mysqlpp::cchar *d, Manip m, - mysqlpp::sql_cmp_type sc) const; - /* cus field */ - - NAME##_cus_field_list field_list($cusparms1) const { - return field_list(",", mysqlpp::do_nothing, $cusparmsv); - } - NAME##_cus_field_list field_list($cusparms2) const { - return field_list(",", mysqlpp::do_nothing, $cusparmsv); - } - NAME##_cus_field_list field_list(std::vector *i) const { - return field_list(",", mysqlpp::do_nothing, i); - } - NAME##_cus_field_list field_list(mysqlpp::sql_cmp_type sc) const - { - return field_list(",", mysqlpp::do_nothing, sc); - } - - NAME##_cus_field_list field_list(mysqlpp::cchar *d, - $cusparms1) const { - return field_list(d, mysqlpp::do_nothing, $cusparmsv); - } - NAME##_cus_field_list field_list(mysqlpp::cchar *d, - $cusparms2) const { - return field_list(d, mysqlpp::do_nothing, $cusparmsv); - } - NAME##_cus_field_list field_list(mysqlpp::cchar *d, - std::vector *i) const { - return field_list(d, mysqlpp::do_nothing, i); - } - NAME##_cus_field_list field_list(mysqlpp::cchar *d, - mysqlpp::sql_cmp_type sc) const { - return field_list(d, mysqlpp::do_nothing, sc); - } - - template - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, - $cusparms1) const; - template - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, - $cusparms2) const; - template - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, - std::vector *i) const; - template - NAME##_cus_field_list field_list(mysqlpp::cchar *d, Manip m, - mysqlpp::sql_cmp_type sc) const; - - /* cus equal */ - - NAME##_cus_equal_list equal_list($cusparms1) const { - return equal_list(",", " = ", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list($cusparms2) const { - return equal_list(",", " = ", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list(std::vector *i) const { - return equal_list(",", " = ", mysqlpp::quote, i); - } - NAME##_cus_equal_list equal_list(mysqlpp::sql_cmp_type sc) const { - return equal_list(",", " = ", mysqlpp::quote, sc); - } - - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, $cusparms1) const { - return equal_list(d, " = ", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, $cusparms2) const { - return equal_list(d, " = ", mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, - std::vector *i) const { - return equal_list(d, " = ", mysqlpp::quote, i); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, - mysqlpp::sql_cmp_type sc) const { - return equal_list(d, " = ", mysqlpp::quote, sc); - } - - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, - $cusparms1) const { - return equal_list(d, c, mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, - $cusparms2) const { - return equal_list(d, c, mysqlpp::quote, $cusparmsv); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, - std::vector *i) const { - return equal_list(d, c, mysqlpp::quote, i); - } - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, - mysqlpp::sql_cmp_type sc) const { - return equal_list(d, c, mysqlpp::quote, sc); - } - - template - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - $cusparms1) const; - template - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - $cusparms2) const; - template - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - std::vector *i) const; - template - NAME##_cus_equal_list equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - mysqlpp::sql_cmp_type sc) const; - }; - $suppress_statics_start - const char *NAME::names[] = { -$names - }; - const char *NAME::_table = #NAME ; - $suppress_statics_end - - template - NAME##_cus_value_list::NAME##_cus_value_list - (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms11) - { - delem = d; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_bool - } - - template - NAME##_cus_value_list::NAME##_cus_value_list - (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms22) { - delem = d; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_list - } - - template - NAME##_cus_field_list::NAME##_cus_field_list - (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms11) { - delem = d; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_bool - } - - template - NAME##_cus_field_list::NAME##_cus_field_list - (const NAME *o, mysqlpp::cchar *d, Manip m, $cusparms22) { - delem = d; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_list - } - - template - NAME##_cus_equal_list::NAME##_cus_equal_list - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, $cusparms11) { - delem = d; - comp = c; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_bool - } - - template - NAME##_cus_equal_list::NAME##_cus_equal_list - (const NAME *o, mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, $cusparms22) { - delem = d; - comp = c; - manip = m; - del_vector = true; - obj = o; - include = new std::vector($i, false); -$create_list - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_value_list& obj) { -$value_list; - return s; - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_field_list& obj) { -$field_list; - return s; - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_equal_list& obj) { -$equal_list; - return s; - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_cus_value_list& obj) { - bool before = false; -$value_list_cus - return s; - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_cus_field_list& obj) { - bool before = false; -$cus_field_list - return s; - } - - template - std::ostream& operator << (std::ostream& s, const NAME##_cus_equal_list& obj) { - bool before = false; -$cus_equal_list - return s; - } - - template - inline NAME##_value_list NAME::value_list(mysqlpp::cchar *d, Manip m) const { - return NAME##_value_list (this, d, m); - } - - template - inline NAME##_field_list NAME::field_list(mysqlpp::cchar *d, Manip m) const { - return NAME##_field_list (this, d, m); - } - - template - inline NAME##_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m) const { - return NAME##_equal_list (this, d, c, m); - } - - template - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m, - $cusparms11) const { - return NAME##_cus_value_list (this, d, m, $cusparmsv); - } - - template - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m, - $cusparms11) const { - return NAME##_cus_field_list (this, d, m, $cusparmsv); - } - - template - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - $cusparms11) const { - return NAME##_cus_equal_list (this, d, c, m, $cusparmsv); - } - - template - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m, - $cusparms22) const { - return NAME##_cus_value_list (this, d, m, $cusparmsv); - } - - template - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m, - $cusparms22) const { - return NAME##_cus_field_list (this, d, m, $cusparmsv); - } - - template - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - $cusparms22) const { - return NAME##_cus_equal_list (this, d, c, m, $cusparmsv); - } - - template - inline NAME##_cus_value_list NAME::value_list(mysqlpp::cchar *d, Manip m, - std::vector *i) const { - return NAME##_cus_value_list (this, d, m, i); - } - - template - inline NAME##_cus_field_list NAME::field_list(mysqlpp::cchar *d, Manip m, - std::vector *i) const { - return NAME##_cus_field_list (this, d, m, i); - } - - template - inline NAME##_cus_equal_list NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, - std::vector *i) const { - return NAME##_cus_equal_list (this, d, c, m, i); - } - - template - inline NAME##_cus_value_list - NAME::value_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const { - sql_compare_type_def_##CMP (NAME, value, NUM); - } - - template - inline NAME##_cus_field_list - NAME::field_list(mysqlpp::cchar *d, Manip m, mysqlpp::sql_cmp_type /*sc*/) const { - sql_compare_type_def_##CMP (NAME, field, NUM); - } - - template - inline NAME##_cus_equal_list - NAME::equal_list(mysqlpp::cchar *d, mysqlpp::cchar *c, Manip m, mysqlpp::sql_cmp_type /*sc*/) const { - sql_compare_type_defe_##CMP (NAME, equal, NUM); - } - - template - void populate_##NAME (NAME *s, const mysqlpp::Row &row) { -$popul - } - - inline NAME::NAME (const mysqlpp::Row &row) - {populate_##NAME(this, row);} - inline void NAME::set (const mysqlpp::Row &row) - {populate_##NAME(this, row);} - - sql_COMPARE__##CMP(NAME, $parmc ) - ---- -print OUT &prepare($out); - -# -# short cut defs -# - -print OUT << "---"; -#define sql_create_basic_$i(NAME, CMP, CONTR, $parm_simple_b) \\ - sql_create_basic_c_order_$i(NAME, CMP, CONTR, $parm_simple2c_b) - -#define sql_create_$i(NAME, CMP, CONTR, $parm_simple) \\ - sql_create_complete_$i(NAME, CMP, CONTR, $parm_simple2c) \\ - -#define sql_create_c_order_$i(NAME, CMP, CONTR, $parm_order) \\ - sql_create_complete_$i(NAME, CMP, CONTR, $parm_order2c) - -#define sql_create_c_names_$i(NAME, CMP, CONTR, $parm_names) \\ - sql_create_complete_$i(NAME, CMP, CONTR, $parm_names2c) - -// --------------------------------------------------- -// End Create $i -// --------------------------------------------------- - ---- - -} - - -sub prepare { - local $_ = $_[0]; - s/\n+$//; - s/\n[\n ]*\n/\n/g; - s/\n+/\\\n/g; - $_ .= "\n\n"; - return $_; -} - DELETED lib/datetime.cpp Index: lib/datetime.cpp ================================================================== --- lib/datetime.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/*********************************************************************** - datetime.cpp - Implements date and time classes compatible with MySQL's - various date and time column types. - - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#define MYSQLPP_NOT_HEADER -#include "common.h" - -#include "datetime.h" - -#include - -#include - -using namespace std; - -namespace mysqlpp { - -std::ostream& operator <<(std::ostream& os, const Date& d) -{ - char fill = os.fill('0'); - ios::fmtflags flags = os.setf(ios::right); - os << setw(4) << d.year << '-' - << setw(2) << d.month << '-' - << setw(2) << d.day; - os.flags(flags); - os.fill(fill); - return os; -} - - -std::ostream& operator <<(std::ostream& os, const Time& t) -{ - char fill = os.fill('0'); - ios::fmtflags flags = os.setf(ios::right); - os << setw(2) << t.hour << ':' - << setw(2) << t.minute << ':' - << setw(2) << t.second; - os.flags(flags); - os.fill(fill); - return os; -} - - -std::ostream& operator <<(std::ostream& os, const DateTime& dt) -{ - operator <<(os, Date(dt)); - os << ' '; - return operator <<(os, Time(dt)); -} - - -cchar* Date::convert(cchar* str) -{ - char num[5]; - - num[0] = *str++; - num[1] = *str++; - num[2] = *str++; - num[3] = *str++; - num[4] = 0; - year = short(strtol(num, 0, 10)); - if (*str == '-') str++; - - num[0] = *str++; - num[1] = *str++; - num[2] = 0; - month = short(strtol(num, 0, 10)); - if (*str == '-') str++; - - num[0] = *str++; - num[1] = *str++; - num[2] = 0; - day = short(strtol(num, 0, 10)); - - return str; -} - - -cchar* Time::convert(cchar* str) -{ - char num[5]; - - num[0] = *str++; - num[1] = *str++; - num[2] = 0; - hour = short(strtol(num,0,10)); - if (*str == ':') str++; - - num[0] = *str++; - num[1] = *str++; - num[2] = 0; - minute = short(strtol(num,0,10)); - if (*str == ':') str++; - - num[0] = *str++; - num[1] = *str++; - num[2] = 0; - second = short(strtol(num,0,10)); - - return str; -} - - -cchar* DateTime::convert(cchar* str) -{ - Date d; - str = d.convert(str); - year = d.year; - month = d.month; - day = d.day; - - if (*str == ' ') ++str; - - Time t; - str = t.convert(str); - hour = t.hour; - minute = t.minute; - second = t.second; - - return str; -} - - -short int Date::compare(const Date& other) const -{ - if (year != other.year) return year - other.year; - if (month != other.month) return month - other.month; - return day - other.day; -} - - -short int Time::compare(const Time& other) const -{ - if (hour != other.hour) return hour - other.hour; - if (minute != other.minute) return minute - other.minute; - return second - other.second; -} - - -short int DateTime::compare(const DateTime& other) const -{ - Date d(*this), od(other); - Time t(*this), ot(other); - - if (int x = d.compare(od)) { - return x; - } - else { - return t.compare(ot); - } -} - -DateTime::operator time_t() const -{ - struct tm tm; - tm.tm_sec = second; - tm.tm_min = minute; - tm.tm_hour = hour; - tm.tm_mday = day; - tm.tm_mon = month - (tiny_int)1; - tm.tm_year = year - 1900; - tm.tm_isdst = -1; - - return mktime(&tm); -}; - -DateTime::DateTime(time_t t) -{ - struct tm tm; -#if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_STLP_VERSION) && \ - !defined(_STLP_VERSION_STR) - // Use thread-safe localtime() replacement included with VS2005 and - // up, but only when using native RTL, not STLport. - localtime_s(&tm, &t); -#elif defined(HAVE_LOCALTIME_R) - // Detected POSIX thread-safe localtime() replacement. - localtime_r(&t, &tm); -#else - // No explicitly thread-safe localtime() replacement found. This - // may still be thread-safe, as some C libraries take special steps - // within localtime() to get thread safety. For example, thread- - // local storage (TLS) in some Windows compilers. - memcpy(&tm, localtime(&t), sizeof(tm)); -#endif - - year = tm.tm_year + 1900; - month = tm.tm_mon + 1; - day = tm.tm_mday; - hour = tm.tm_hour; - minute = tm.tm_min; - second = tm.tm_sec; -} - -} // end namespace mysqlpp - - DELETED lib/datetime.h Index: lib/datetime.h ================================================================== --- lib/datetime.h +++ /dev/null @@ -1,384 +0,0 @@ -/// \file datetime.h -/// \brief Declares classes to add MySQL-compatible date and time -/// types to C++'s type system. - -/*********************************************************************** - Copyright (c) 1998 by Kevin Atkinson, (c) 1999, 2000 and 2001 by - MySQL AB, and (c) 2004, 2005 by Educational Technology Resources, Inc. - Others may also hold copyrights on code in this file. See the CREDITS - 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 -***********************************************************************/ - -#ifndef MYSQLPP_DATETIME_H -#define MYSQLPP_DATETIME_H - -#include "common.h" - -#include "coldata.h" -#include "stream2string.h" -#include "tiny_int.h" - -#include -#include -#include - -namespace mysqlpp { - -/// \brief Base class template for MySQL++ date and time classes. -/// -/// This template primarily defines the comparison operators, which are -/// all implemented in terms of compare(). Each subclass implements that -/// as a protected method, because these operators are the only -/// supported comparison method. -/// -/// This template also defines interfaces for converting the object to -/// a string form, which a subclass must define. -template struct DTbase -{ - /// \brief Destroy object - virtual ~DTbase() { } - - /// \brief Return a copy of the item in C++ string form - operator std::string() const - { - return stream2string(*this); - } - - /// \brief Compare this object to another of the same type - /// - /// Returns < 0 if this object is "before" the other, 0 of they are - /// equal, and > 0 if this object is "after" the other. - MYSQLPP_EXPORT virtual short compare(const T& other) const = 0; - - /// \brief Returns true if "other" is equal to this object - bool operator ==(const T& other) const - { - return !compare(other); - } - - /// \brief Returns true if "other" is not equal to this object - bool operator !=(const T& other) const - { - return compare(other); - } - - /// \brief Returns true if "other" is less than this object - bool operator <(const T& other) const - { - return compare(other) < 0; - } - - /// \brief Returns true if "other" is less than or equal to this object - bool operator <=(const T& other) const - { - return compare(other) <= 0; - } - - /// \brief Returns true if "other" is greater than this object - bool operator >(const T& other) const - { - return compare(other) > 0; - } - - /// \brief Returns true if "other" is greater than or equal to this object - bool operator >=(const T& other) const - { - return compare(other) >= 0; - } -}; - - -/// \brief C++ form of MySQL's DATETIME type. -/// -/// Objects of this class can be inserted into streams, and -/// initialized from MySQL DATETIME strings. -struct DateTime : public DTbase -{ - /// \brief the year - /// - /// No surprises; the year 2005 is stored as the integer 2005. - short int year; - - /// \brief the month, 1-12 - tiny_int month; - - /// \brief the day, 1-31 - tiny_int day; - - /// \brief hour, 0-23 - tiny_int hour; - - /// \brief minute, 0-59 - tiny_int minute; - - /// \brief second, 0-59 - tiny_int second; - - /// \brief Default constructor - DateTime() : - DTbase(), - year(0), - month(0), - day(0), - hour(0), - minute(0), - second(0) - { - } - - /// \brief Initialize object as a copy of another Date - DateTime(const DateTime& other) : - DTbase(), - year(other.year), - month(other.month), - day(other.day), - hour(other.hour), - minute(other.minute), - second(other.second) - { - } - - /// \brief Initialize object from a MySQL date-and-time string - /// - /// String must be in the HH:MM:SS format. It doesn't have to be - /// zero-padded. - DateTime(cchar* str) { convert(str); } - - /// \brief Initialize object from a MySQL date-and-time string - /// - /// \sa DateTime(cchar*) - DateTime(const ColData& str) - { - convert(str.c_str()); - } - - /// \brief Initialize object from a MySQL date-and-time string - /// - /// \sa DateTime(cchar*) - DateTime(const std::string& str) - { - convert(str.c_str()); - } - - /// \brief Initialize object from a time_t - DateTime(time_t t); - - /// \brief Compare this datetime to another. - /// - /// Returns < 0 if this datetime is before the other, 0 of they are - /// equal, and > 0 if this datetime is after the other. - /// - /// This method is protected because it is merely the engine used - /// by the various operators in DTbase. - MYSQLPP_EXPORT short compare(const DateTime& other) const; - - /// \brief Parse a MySQL date and time string into this object. - MYSQLPP_EXPORT cchar* convert(cchar*); - - /// Convert to time_t - operator time_t() const; -}; - - -/// \brief Inserts a DateTime object into a C++ stream in a -/// MySQL-compatible format. -/// -/// The date and time are inserted into the stream, in that order, -/// with a space between them. -/// -/// \param os stream to insert date and time into -/// \param dt date/time object to insert into stream -MYSQLPP_EXPORT std::ostream& operator <<(std::ostream& os, - const DateTime& dt); - - -/// \brief C++ form of MySQL's DATE type. -/// -/// Objects of this class can be inserted into streams, and -/// initialized from MySQL DATE strings. -struct Date : public DTbase -{ - /// \brief the year - /// - /// No surprises; the year 2005 is stored as the integer 2005. - short int year; - - /// \brief the month, 1-12 - tiny_int month; - - /// \brief the day, 1-31 - tiny_int day; - - /// \brief Default constructor - Date() : year(0), month(0), day(0) { } - - /// \brief Initialize object - Date(short int y, tiny_int m, tiny_int d) : - DTbase(), - year(y), - month(m), - day(d) - { - } - - /// \brief Initialize object as a copy of another Date - Date(const Date& other) : - DTbase(), - year(other.year), - month(other.month), - day(other.day) - { - } - - /// \brief Initialize object from date part of date/time object - Date(const DateTime& other) : - DTbase(), - year(other.year), - month(other.month), - day(other.day) - { - } - - /// \brief Initialize object from a MySQL date string - /// - /// String must be in the YYYY-MM-DD format. It doesn't have to be - /// zero-padded. - Date(cchar* str) { convert(str); } - - /// \brief Initialize object from a MySQL date string - /// - /// \sa Date(cchar*) - Date(const ColData& str) { convert(str.c_str()); } - - /// \brief Initialize object from a MySQL date string - /// - /// \sa Date(cchar*) - Date(const std::string& str) - { - convert(str.c_str()); - } - - /// \brief Compare this date to another. - /// - /// Returns < 0 if this date is before the other, 0 of they are - /// equal, and > 0 if this date is after the other. - MYSQLPP_EXPORT short int compare(const Date& other) const; - - /// \brief Parse a MySQL date string into this object. - MYSQLPP_EXPORT cchar* convert(cchar*); -}; - -/// \brief Inserts a Date object into a C++ stream -/// -/// The format is YYYY-MM-DD, zero-padded. -/// -/// \param os stream to insert date into -/// \param d date to insert into stream -MYSQLPP_EXPORT std::ostream& operator <<(std::ostream& os, - const Date& d); - - -/// \brief C++ form of MySQL's TIME type. -/// -/// Objects of this class can be inserted into streams, and -/// initialized from MySQL TIME strings. -struct Time : public DTbase