Author: wyoung
Date: Thu May 13 22:39:49 2010
New Revision: 2633

URL: http://svn.gna.org/viewcvs/mysqlpp?rev=2633&view=rev
Log:
Updated release plan.  Added a few more items to the 3.1 section
from other sections, dedicated 3.2 to SSQLS v2, and other minor changes.

Modified:
    trunk/Wishlist

Modified: trunk/Wishlist
URL: 
http://svn.gna.org/viewcvs/mysqlpp/trunk/Wishlist?rev=2633&r1=2632&r2=2633&view=diff
==============================================================================
--- trunk/Wishlist (original)
+++ trunk/Wishlist Thu May 13 22:39:49 2010
@@ -10,31 +10,31 @@
     o Suppress DOS line-ending related diffs from examples/cgi_jpeg
       output when running dtest on Windows.  Check for -D?
 
+    o Need to link statically to connect to MySQL Embedded?
+
+      
http://stackoverflow.com/questions/672451/howto-communicate-with-mysql-embedded-server-from-mysql-dll
+
+
+v3.1 Plan
+---------
+    o Can we fix "if (!query)" without changing the ABI?
+
+      http://lists.mysql.com/plusplus/8594
+    
+    o Fix pedantic warning:
+
+      lib/null.h:55: warning: type qualifiers ignored on function return type
+
     o Can we bring examples/vstudio into the top-level build system?
       Would be nice to get MYSQL_WIN_DIR support, and to make it
       link against the built MySQL++ instead of requiring it to be
       installed first.
 
+    o Add -lmysqlclient for Xcode case
+
     o Xcode project needs to ignore config.h when not doing an autotools
       build.  Put conditions in lib/common.h.
 
-    o Add -lmysqlclient for Xcode case
-
-    o Can we fix "if (!query)" without changing the ABI?
-
-      http://lists.mysql.com/plusplus/8594
-    
-    o Fix pedantic warning:
-
-      lib/null.h:55: warning: type qualifiers ignored on function return type
-
-    o Need to link statically to connect to MySQL Embedded?
-
-      
http://stackoverflow.com/questions/672451/howto-communicate-with-mysql-embedded-server-from-mysql-dll
-
-
-v3.2 Tentative Plan
--------------------
     o Result::field_num() should be case-insensitive; column names
       aren't case-sensitive in SQL.  MySQL++ is currently trying to
       do this by smashing field name case to lowercase in FieldNames,
@@ -44,177 +44,191 @@
       all around to remove the case smashing and do case-insensitive
       comparisons instead.
 
-    o Ensure "make rpm" process doesn't override --with-field-limit
+    o Raise tquery and SSQLS field limits in RPM build process, since
+      the very fact that you're building an RPM means we know the
+      limits of the minimum supported platform.  It needs to be smart
+      enough to not override a value given when one hand-configures a
+      source tree, possibly by parsing it out of ssqls.h.  Otherwise,
+      use the known floor value.
 
     o Check that it works with Connector/C and MySQL 5.1
 
     o Document sql_*_null in userman
 
-    o SSQLS v2 (http://lists.mysql.com/plusplus/6929):
-
-      - C++ code generator, from walking DSL parse tree:
-
-        examples/stock.ssqls gives ssqls_stock.h containing:
-
-            class SQLStock : public mysqlpp::SsqlsBase
-            {
-            public:
-                SQLStock(Connection* conn = 0); // default ctor
-                SQLStock(const SQLStock& other);
-                SQLStock(const mysqlpp::Row& row,
-                        Connection* conn = 0); // full init from query
-                SQLStock(mysqlpp::sql_bigint key1); // exemplar creation
-                SQLStock(Connection* conn,
-                        mysqlpp::sql_bigint key1) // calls load();
-                SQLStock(
-                    mysqlpp::sql_bigint f1,
-                    mysqlpp::sql_bigint f2,
-                    mysqlpp::sql_double f3,
-                    mysqlpp::sql_double f4,
-                    const mysqlpp::sql_date& f5,
-                    const mysqlpp::sql_mediumtext& f6); // full init
-                SQLStock(Connection* conn,
-                    mysqlpp::sql_bigint f2,
-                    mysqlpp::sql_double f3,
-                    mysqlpp::sql_double f4,
-                    const mysqlpp::sql_date& f5,
-                    const mysqlpp::sql_mediumtext& f6); // calls create()
-                SQLStock(Connection* conn,
-                    mysqlpp::sql_bigint f1,
-                    mysqlpp::sql_bigint f2,
-                    mysqlpp::sql_double f3,
-                    mysqlpp::sql_double f4,
-                    const mysqlpp::sql_date& f5,
-                    const mysqlpp::sql_mediumtext& f6); // calls save()
-
-                bool createTable(Connection* conn = 0) const;
-                const char* getTableName() const
-                        { return class_table_name_ || table(); }
-                void setTableName(const char* name)
-                        { instance_table(name); }
-                static void setTableName(const char* name)
-                        { class_table_name_ = name; }
-
-                std::ostream& equal_list(std::ostream& os) const;
-                std::ostream& json(std::ostream& os) const;
-                std::ostream& name_list(std::ostream& os) const;
-                std::ostream& value_list(std::ostream& os) const;
-                std::ostream& xml(std::ostream& os) const;
-
-                mysqlpp::sql_bigint getId() const;
-                mysqlpp::sql_bigint getNum() const;
-                mysqlpp::sql_double getWeight() const;
-                mysqlpp::sql_double getPrice() const;
-                const mysqlpp::sql_date& getSdate() const;
-                const mysqlpp::sql_mediumtext& getDescription() const;
- 
-                void setId(mysqlpp::sql_bigint value);
-                void setNum(mysqlpp::sql_bigint value);
-                void setWeight(mysqlpp::sql_double value);
-                void setPrice(mysqlpp::sql_double value);
-                void setSdate(const mysqlpp::sql_date& value);
-                void setDescripion(const mysqlpp::sql_mediumtext& value);
- 
-                bool operator<(const SQLStock& rhs) const;
-                SQLStock& operator=(const SQLStock& rhs);
-
-            protected:
-                mysqlpp::sql_bigint id_;
-                mysqlpp::sql_bigint num_;
-                mysqlpp::sql_double weight_;
-                mysqlpp::sql_double price_;
-                mysqlpp::sql_date sdate_;
-                mysqlpp::sql_mediumtext description_;
-
-                std::bitset<6> set_fields_;
-
-            private:
-                static const char* class_table_name_;
-            };
-
-        ...and ssqls_stock.cc, containing implementation for same.
-
-      - Ensure we're using case-insensitive SQL column to C++ field name
-        matching.  Column names aren't case-sensitive in SQL.
-
-      - SQL table updater/builder, -T option, taking .ssqls and
-        creating or updating the DB table to match.
-
-      - If using accessors, generate "std::bitset<num_fields> is_set_",
-        and set the appropriate bit when calling each setFoo() so we can
-        intuit which fields were set.  Probably also need an enum:
-
-            enum FieldIndices {
-                id_field_index_,
-                num_field_index_,
-                ...
-            };
-
-        This will allow Query::select(), for instance, to figure out
-        that we want it to select by a non-key field, returning all
-        matches.
-
-      - Define operator<< for SSQLS and a set of manipulators which
-        govern whether the operator calls equal_list(), json(),
-        name_list(), value_list(), or xml() to do the actual insertion.
-
-      - Define operator>> for SSQLS, taking XML as input, in the form
-        emitted via xml().  expat uses the new BSD license, so maybe
-        we can just drop it in the tree, with an option to use the
-        platform expat on autoconf systems.
-
-      - MySQL table metadata to SSQLSv2 data structure translator.
-        (-s, -u, -p and -t flag support.)  Add this to dtest,
-        extracting stock.ssqls definition from DB.
-
-      - Replace Query's template methods taking SSQLSes with concrete
-        methods taking const SsqlsBase&.
-
-      - Create Query::remove(const SsqlsBase&)
-
-      - Try to restore VC++ 2003 compatibility
-
-      - Try to remove of 'explicit' from Date, DateTime and Time
-        ctors taking stringish types.  (Can't do it for real until v4,
-        but we can lay the ground work here.)
-
-      - Auto-create() ctor: if there is an auto_increment field,
-        populate it on query success.
-
-      - Detect ctor conflicts corresponding to sql_create_N(N, N...)
-        in SSQLSv1.  ssqlsxlat can be smart enough to just not emit
-        duplicate ctors.
-
-      - Special case of ctor suppression: if the number of key fields
-        equals the total number of fields, you get an auto-load()
-        ctor, not auto-update().
-
-      - Replace CREATE TABLE SQL in resetdb with create_table() calls.
-
-      - Option to use integer indices into Row when populating?  Only
-        bother if it gives a speed advantage we can actually see,
-        because it removes all the dynamic typing advantages we got with
-        the change to field name indices in v3.0.
-
-      - Convert SSQLS v1 examples to v2
-
-      - Remove MYSQLPP_ALLOW_SSQLS_V1 warning suppressor from examples.
-        (Leave test programs alone until we drop v1 support.)
+    o Add to datetime.h: inline DateTime NOW() { return DateTime(); }
+
+
+v3.2 Plan: Finish SSQLS v2
+--------------------------
+    See http://lists.mysql.com/plusplus/6929 for high-level plan.
+
+    o Goal: Restore VC++ 2003 compatibility with SSQLS, lost with v1
+
+    o C++ code generator, from walking DSL parse tree:
+
+      examples/stock.ssqls gives ssqls_stock.h containing:
+
+          class SQLStock : public mysqlpp::SsqlsBase
+          {
+          public:
+              SQLStock(Connection* conn = 0); // default ctor
+              SQLStock(const SQLStock& other);
+              SQLStock(const mysqlpp::Row& row,
+                      Connection* conn = 0); // full init from query
+              SQLStock(mysqlpp::sql_bigint key1); // exemplar creation
+              SQLStock(Connection* conn,
+                      mysqlpp::sql_bigint key1) // calls load();
+              SQLStock(
+                  mysqlpp::sql_bigint f1,
+                  mysqlpp::sql_bigint f2,
+                  mysqlpp::sql_double f3,
+                  mysqlpp::sql_double f4,
+                  const mysqlpp::sql_date& f5,
+                  const mysqlpp::sql_mediumtext& f6); // full init
+              SQLStock(Connection* conn,
+                  mysqlpp::sql_bigint f2,
+                  mysqlpp::sql_double f3,
+                  mysqlpp::sql_double f4,
+                  const mysqlpp::sql_date& f5,
+                  const mysqlpp::sql_mediumtext& f6); // calls create()
+              SQLStock(Connection* conn,
+                  mysqlpp::sql_bigint f1,
+                  mysqlpp::sql_bigint f2,
+                  mysqlpp::sql_double f3,
+                  mysqlpp::sql_double f4,
+                  const mysqlpp::sql_date& f5,
+                  const mysqlpp::sql_mediumtext& f6); // calls save()
+
+              bool createTable(Connection* conn = 0) const;
+              const char* getTableName() const
+                      { return class_table_name_ || table(); }
+              void setTableName(const char* name)
+                      { instance_table(name); }
+              static void setTableName(const char* name)
+                      { class_table_name_ = name; }
+
+              std::ostream& equal_list(std::ostream& os) const;
+              std::ostream& json(std::ostream& os) const;
+              std::ostream& name_list(std::ostream& os) const;
+              std::ostream& value_list(std::ostream& os) const;
+              std::ostream& xml(std::ostream& os) const;
+
+              mysqlpp::sql_bigint getId() const;
+              mysqlpp::sql_bigint getNum() const;
+              mysqlpp::sql_double getWeight() const;
+              mysqlpp::sql_double getPrice() const;
+              const mysqlpp::sql_date& getSdate() const;
+              const mysqlpp::sql_mediumtext& getDescription() const;
+
+              void setId(mysqlpp::sql_bigint value);
+              void setNum(mysqlpp::sql_bigint value);
+              void setWeight(mysqlpp::sql_double value);
+              void setPrice(mysqlpp::sql_double value);
+              void setSdate(const mysqlpp::sql_date& value);
+              void setDescripion(const mysqlpp::sql_mediumtext& value);
+
+              bool operator<(const SQLStock& rhs) const;
+              SQLStock& operator=(const SQLStock& rhs);
+
+          protected:
+              mysqlpp::sql_bigint id_;
+              mysqlpp::sql_bigint num_;
+              mysqlpp::sql_double weight_;
+              mysqlpp::sql_double price_;
+              mysqlpp::sql_date sdate_;
+              mysqlpp::sql_mediumtext description_;
+
+              std::bitset<6> set_fields_;
+
+          private:
+              static const char* class_table_name_;
+          };
+
+      ...and ssqls_stock.cc, containing implementation for same.
+
+    o Ensure we're using case-insensitive SQL column to C++ field name
+      matching.  Column names aren't case-sensitive in SQL.
+
+    o SQL table updater/builder, -T option, taking .ssqls and
+      creating or updating the DB table to match.
+
+    o If using accessors, generate "std::bitset<num_fields> is_set_",
+      and set the appropriate bit when calling each setFoo() so we
+      can intuit which fields were set.  Probably also need an enum:
+
+          enum FieldIndices {
+              id_field_index_,
+              num_field_index_,
+              ...
+          };
+
+      This will allow Query::select(), for instance, to figure out that
+      we want it to select by a non-key field, returning all matches.
+
+    o Define operator<< for SSQLS and a set of manipulators which
+      govern whether the operator calls equal_list(), json(),
+      name_list(), value_list(), or xml() to do the actual insertion.
+
+    o Define operator<< for sequence_container<SsqlsBase> and similar
+      for associative containers.  Give mysql(1)-like ASCII grid or
+      some other table format.
+
+    o Define operator>> for SSQLS, taking XML as input, in the form
+      emitted via xml().  expat uses the new BSD license, so maybe
+      we can just drop it in the tree, with an option to use the
+      platform expat on autoconf systems.
+
+    o MySQL table metadata to SSQLSv2 data structure translator.
+      (-s, -u, -p and -t flag support.)  Add this to dtest, extracting
+      stock.ssqls definition from DB.
+
+    o Replace Query's template methods taking SSQLSes with concrete
+      methods taking const SsqlsBase&.
+
+    o Create Query::remove(const SsqlsBase&)
+
+    o Try to remove of 'explicit' from Date, DateTime and Time
+      ctors taking stringish types.  (Can't do it for real until v4,
+      but we can lay the ground work here.)
+
+    o Auto-create() ctor: if there is an auto_increment field,
+      populate it on query success.
+
+    o Detect ctor conflicts corresponding to sql_create_N(N, N...)
+      in SSQLSv1.  ssqlsxlat can be smart enough to just not emit
+      duplicate ctors.
+
+    o Special case of ctor suppression: if the number of key fields
+      equals the total number of fields, you get an auto-load() ctor,
+      not auto-update().
+
+    o Replace CREATE TABLE SQL in resetdb with create_table() calls.
+
+    o Option to use integer indices into Row when populating?  Only
+      bother if it gives a speed advantage we can actually see,
+      because it removes all the dynamic typing advantages we got
+      with the change to field name indices in v3.0.
 
     o Try to add Query::storein(container, ssqls), which generates
       SELECT * from {ssqls.table()} and stores the result.  May not be
       possible due to existing overloads, but try.  If it works, use
       this form in the userman Overview section, saving one LOC.
 
+    o Convert SSQLS v1 examples to v2.  SSQLS v2 isn't done until
+      there's a straightformward conversion path for all examples.
+
+    o Add #warning to generated ssqls.h saying that you should now use
+      SSQLS v2.  Wrap it in a check for MYSQLPP_ALLOW_SSQLS_V1,
+      so people can disable the warning.
+
+
+v3.3 Tentative Plan
+-------------------
     o Add Query::storein<Container, T>(container), getting table
       name from container::value_type.table() instead.
 
     o Define operator<< for Fields, Row, StoreQueryResult, etc., giving
       CSV format.
-
-    o Define operator<< for sequence_container<SsqlsBase> and similar
-      for associative containers.  Give mysql(1)-like ASCII grid or
-      some other table format.
 
     o Remove libexcommon.  Between above and SSQLSv2, we should have
       everything we need to get equivalent output without special
@@ -235,15 +249,6 @@
       mysql++-config script, which either wraps pkg-config or
       reinvents it, poorly, for systems that don't have it.
 
-    o Would this be smart:
-
-        #define NOW() mysqlpp::DateTime()
-
-      ?  Useful with template queries, but risky in that it's a short
-      word at global scope.  This would be inefficient, but maybe okay:
-
-        inline DateTime NOW() { return DateTime(); }
-
     o Add String::operator==(const mysqlpp::null_type&).  Needed to
       allow comparison of row[x] returns to SQL null.  Change one of
       the examples to show it?
@@ -266,9 +271,6 @@
       - Move memory leak FAQ into userman, rewriting it to cover
         all this.
 
-
-v3.2 Tentative Plan
--------------------
     o mysqlpp::execute manipulator.  Immediately executes built
       query string.  Works best with exceptions, as that's the only way
       to detect failures.


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

Reply via email to