From 800a4a3e7f987e4ec9880adecc0db92dfa7eb023 Mon Sep 17 00:00:00 2001 From: cxl Date: Wed, 4 Sep 2013 10:48:58 +0000 Subject: [PATCH] Sql: SqlMassInsert now able to insert ValueMap, SelectAll, new mass loading variants git-svn-id: svn://ultimatepp.org/upp/trunk@6307 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Sql/MassInsert.cpp | 7 +++++++ uppsrc/Sql/Sqlexp.h | 1 + uppsrc/Sql/Sqls.h | 19 +++++++++++++++++++ uppsrc/Sql/src.tpp/SqlMassInsert$en-us.tpp | 7 +++++++ 4 files changed, 34 insertions(+) diff --git a/uppsrc/Sql/MassInsert.cpp b/uppsrc/Sql/MassInsert.cpp index b839f7b2e..8a42d221d 100644 --- a/uppsrc/Sql/MassInsert.cpp +++ b/uppsrc/Sql/MassInsert.cpp @@ -26,6 +26,13 @@ SqlMassInsert& SqlMassInsert::operator()(SqlId col, const Value& val) return *this; } +SqlMassInsert& SqlMassInsert::operator()(const ValueMap& data) +{ + for(int i = 0; i < data.GetCount(); i++) + operator()((String)data.GetKey(i), data.GetValue(i)); + return *this; +} + SqlMassInsert& SqlMassInsert::EndRow(SqlBool remove) { cache.Top().remove = remove; diff --git a/uppsrc/Sql/Sqlexp.h b/uppsrc/Sql/Sqlexp.h index 2cd995b4e..522c05030 100644 --- a/uppsrc/Sql/Sqlexp.h +++ b/uppsrc/Sql/Sqlexp.h @@ -590,6 +590,7 @@ SqlSelect operator|(const SqlSelect& s1, const SqlSelect& s2); SqlSelect operator&(const SqlSelect& s1, const SqlSelect& s2); SqlSelect operator-(const SqlSelect& s1, const SqlSelect& s2); +inline SqlSelect SelectAll() { return SqlSelect(SqlAll()); } inline SqlSelect Select(const SqlSet& set) { return SqlSelect(set); } inline SqlSelect Select(Fields f) { return SqlSelect(f); } diff --git a/uppsrc/Sql/Sqls.h b/uppsrc/Sql/Sqls.h index 80a270540..d277b5cdd 100644 --- a/uppsrc/Sql/Sqls.h +++ b/uppsrc/Sql/Sqls.h @@ -468,6 +468,7 @@ class SqlMassInsert { public: SqlMassInsert& operator()(SqlId col, const Value& val); + SqlMassInsert& operator()(const ValueMap& data); SqlMassInsert& EndRow(SqlBool remove = SqlBool()); void Flush(); bool IsError() const { return error; } @@ -499,6 +500,24 @@ void SqlLoadColumn(T& t, SqlId table, SqlId column, SqlId key = SqlId("ID")) t.Add(sql[key], sql[column]); } +template +void SqlLoadTable(T& t, SqlSelect select, SqlId key = SqlId("ID")) +{ + Sql sql; + sql * select; + while(sql.Fetch()) + sql.Get(t.Add(sql[key])); +} + +template +void SqlLoadColumn(T& t, SqlSelect select) +{ + Sql sql; + sql * select; + while(sql.Fetch()) + t.Add(sql[0], sql[1]); +} + template void operator*=(VectorMap& map, SqlSelect select) { diff --git a/uppsrc/Sql/src.tpp/SqlMassInsert$en-us.tpp b/uppsrc/Sql/src.tpp/SqlMassInsert$en-us.tpp index 550ee0707..b8f7c77be 100644 --- a/uppsrc/Sql/src.tpp/SqlMassInsert$en-us.tpp +++ b/uppsrc/Sql/src.tpp/SqlMassInsert$en-us.tpp @@ -27,6 +27,13 @@ Insert][@(0.0.255) `&]_[* operator()]([_^SqlId^ SqlId]_[*@3 col], [@(0.0.255) co alue][@(0.0.255) `&]_[*@3 val])&] [s2; Adds a single column to be inserted.&] [s3; &] +[s4;%- &] +[s5;:SqlMassInsert`:`:operator`(`)`(const ValueMap`&`):%- [_^SqlMassInsert^ SqlMassInse +rt][@(0.0.255) `&]_[* operator()]([@(0.0.255) const]_[_^ValueMap^ ValueMap][@(0.0.255) `&]_ +[*@3 data])&] +[s2; Inserts a set of columns defined by key`-value pairs of [%-*@3 data] +(key is the name of column, value is the inserted value).&] +[s3; &] [s4; &] [s5;:SqlMassInsert`:`:EndRow`(SqlBool`):%- [_^SqlMassInsert^ SqlMassInsert][@(0.0.255) `& ]_[* EndRow]([_^SqlBool^ SqlBool]_[*@3 remove]_`=_[_^SqlBool^ SqlBool]())&]