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