From a9d7aed5bd389d229983c8bd84fbefabb1aaa6a3 Mon Sep 17 00:00:00 2001 From: cxl Date: Wed, 7 Apr 2010 21:44:38 +0000 Subject: [PATCH] SqlCtrl: SqlArray has new WhenFilter Gate (able to filter records being fetched) git-svn-id: svn://ultimatepp.org/upp/trunk@2313 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/SqlCtrl/SqlArray.cpp | 22 ++++++++++++++-------- uppsrc/SqlCtrl/SqlCtrl.h | 5 +++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/uppsrc/SqlCtrl/SqlArray.cpp b/uppsrc/SqlCtrl/SqlArray.cpp index f62f9229b..4310bd772 100644 --- a/uppsrc/SqlCtrl/SqlArray.cpp +++ b/uppsrc/SqlCtrl/SqlArray.cpp @@ -171,27 +171,32 @@ void SqlArray::AppendQuery(SqlBool where) WhenPreQuery(); if(fk.IsNull() || !IsNull(fkv)) { SqlSet cols; - for(int i = 0; i < GetIndexCount(); i++) - if(!GetId(i).IsNull()) - cols.Cat(SqlId(GetId(i))); + VectorMap fm; + for(int i = 0; i < GetIndexCount(); i++) { + if(!GetId(i).IsNull()) { + Id id(GetId(i)); + cols.Cat(SqlId(id)); + fm.Add(id); + } + } SqlBool wh = where; if(!fk.IsNull()) wh = wh && fk == fkv; Sql sql(Session()); Session().ClearError(); -// AutoWaitCursor awc(querytime); // todo: Fidler -> WaitCursor if(IsNull(count)) sql * UPP::Select(cols).From(table).Where(wh).OrderBy(orderby); else sql * UPP::Select(cols).From(table).Where(wh).OrderBy(orderby).Limit(count).Offset(offset); - if(ShowError(sql)) { -// awc.Cancel(); // todo: Fidler -> WaitCursor + if(ShowError(sql)) return; - } for(;;) { Vector row; if(!sql.Fetch(row)) break; - Add(row); + for(int i = 0; i < min(row.GetCount(), fm.GetCount()); i++) + fm[i] = row[i]; + if(WhenFilter(fm)) + Add(row); } if(GetCount()) if(goendpostquery) @@ -229,6 +234,7 @@ SqlArray::SqlArray() { RowName(t_("record")); offset = 0; count = Null; + WhenFilter = true; } END_UPP_NAMESPACE diff --git a/uppsrc/SqlCtrl/SqlCtrl.h b/uppsrc/SqlCtrl/SqlCtrl.h index 80f09b152..522ab93c7 100644 --- a/uppsrc/SqlCtrl/SqlCtrl.h +++ b/uppsrc/SqlCtrl/SqlCtrl.h @@ -89,8 +89,9 @@ private: void Inserting(); public: - Callback WhenPreQuery; - Callback WhenPostQuery; + Callback WhenPreQuery; + Callback WhenPostQuery; + Gate1&> WhenFilter; void StdBar(Bar& menu); bool CanInsert() const;