diff --git a/uppsrc/CtrlLib/ArrayCtrl.cpp b/uppsrc/CtrlLib/ArrayCtrl.cpp index c70fd4a5f..cd2758858 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.cpp +++ b/uppsrc/CtrlLib/ArrayCtrl.cpp @@ -2128,6 +2128,7 @@ void ArrayCtrl::Sort(int from, int count, const ArrayCtrl::Order& order) { void ArrayCtrl::ColumnSort(int column, const ValueOrder& order) { + Value key = GetKey(); CHECK(KillCursor()); ClearCache(); Vector hv; @@ -2137,6 +2138,8 @@ void ArrayCtrl::ColumnSort(int column, const ValueOrder& order) SortB(GetStableSortOrder(hv, order)); Refresh(); SyncInfo(); + if(columnsortfindkey) + FindSetCursor(key); } void ArrayCtrl::SetSortColumn(int ii, bool desc) @@ -2308,6 +2311,7 @@ void ArrayCtrl::Reset() { sortcolumn = -1; allsorting = false; acceptingrow = 0; + columnsortfindkey = false; linecy = Draw::GetStdFontCy(); Clear(); sb.SetLine(linecy); diff --git a/uppsrc/CtrlLib/ArrayCtrl.h b/uppsrc/CtrlLib/ArrayCtrl.h index 267a243c6..739f0ead6 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.h +++ b/uppsrc/CtrlLib/ArrayCtrl.h @@ -188,6 +188,7 @@ private: int dropline, dropcol; int sortcolumn; bool sortcolumndescending; + bool columnsortfindkey; int acceptingrow; mutable int selectcount; @@ -586,6 +587,7 @@ public: ArrayCtrl& NoFocusSetCursor() { focussetcursor = false; return *this; } ArrayCtrl& MovingHeader(bool b) { header.Moving(b); return *this; } ArrayCtrl& NoMovingHeader() { return MovingHeader(false); } + ArrayCtrl& ColumnSortFindKey() { columnsortfindkey = true; return *this; } ArrayCtrl& AllSorting(); ArrayCtrl& ColumnWidths(const char *s); diff --git a/uppsrc/plugin/sqlite3/Sqlite3Schema.h b/uppsrc/plugin/sqlite3/Sqlite3Schema.h index a1d5d5df5..1334f7454 100644 --- a/uppsrc/plugin/sqlite3/Sqlite3Schema.h +++ b/uppsrc/plugin/sqlite3/Sqlite3Schema.h @@ -45,18 +45,10 @@ #define UNIQUE ATTRIBUTE("create unique index IDX_@x on @t(@c);", \ "drop index IDX_@x;") -#define REFERENCES(x) ATTRIBUTE("alter table @t add (constraint FK_@x foreign key "\ - "(@c) references " #x ");",\ - "alter table @t drop constraint FK_@x;") -#define REFERENCES_CASCADE(x) ATTRIBUTE("alter table @t add (constraint FK_@x foreign key "\ - "(@c) references " #x " on delete cascade);",\ - "alter table @t drop constraint FK_@x;") -#define REFERENCES_(n, x) ATTRIBUTE("alter table @t add (constraint FK_@x$" #n " foreign key "\ - "(@c) references " #x ");",\ - "alter table @t drop constraint FK_@x$" #n ";") -#define REFERENCES_CASCADE_(n, x) ATTRIBUTE("alter table @t add (constraint FK_@x$" #n " foreign key "\ - "(@c) references " #x " on delete cascade);",\ - "alter table @t drop constraint FK_@x$" #n ";") +#define REFERENCES(x) +#define REFERENCES_CASCADE(x) +#define REFERENCES_(n, x) +#define REFERENCES_CASCADE_(n, x) #define DUAL_PRIMARY_KEY(k1, k2) INLINE_ATTRIBUTE(", primary key (" #k1 ", " #k2 ")")