From f005c4986cf63e3078871ce021ded6e492ae5754 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 20 Sep 2014 17:30:51 +0000 Subject: [PATCH] .reference git-svn-id: svn://ultimatepp.org/upp/trunk@7705 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- reference/SqlExp/SqlExp.cpp | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/reference/SqlExp/SqlExp.cpp b/reference/SqlExp/SqlExp.cpp index ecadde3f9..75ad8e321 100644 --- a/reference/SqlExp/SqlExp.cpp +++ b/reference/SqlExp/SqlExp.cpp @@ -177,6 +177,49 @@ GUI_APP_MAIN (SelectAll().From(TNSIZE)) ); + SqlId COUNT("COUNT"); + EXP( + WithRecursive(TN)(ID, NAME, PARENT_ID) + .As(Select(ID, NAME, PARENT_ID).From(TREENODE).Where(IsNull(PARENT_ID)) + + + Select(TREENODE(ID, NAME, PARENT_ID)).From(TREENODE, TN) + .Where(TREENODE(PARENT_ID) == TN(ID))) + .With(TNSIZE)(NAME, COUNT) + .As(Select(Select(NAME).From(TREENODE).Where(ID == TN(PARENT_ID)).AsValue(), + SqlCountRows()) + .From(TN) + .GroupBy(PARENT_ID)) + (Insert(TABLE1)(NAME, NAME)(COL, COUNT).From(TNSIZE)) + ); + + EXP( + WithRecursive(TN)(ID, NAME, PARENT_ID) + .As(Select(ID, NAME, PARENT_ID).From(TREENODE).Where(IsNull(PARENT_ID)) + + + Select(TREENODE(ID, NAME, PARENT_ID)).From(TREENODE, TN) + .Where(TREENODE(PARENT_ID) == TN(ID))) + .With(TNSIZE)(ID, COUNT) + .As(Select(ID, + SqlCountRows()) + .From(TN) + .GroupBy(PARENT_ID)) + (Delete(TREENODE).Where(ID == Select(ID).From(TNSIZE).Where(COUNT == 0))) + ); + + EXP( + WithRecursive(TN)(ID, NAME, PARENT_ID) + .As(Select(ID, NAME, PARENT_ID).From(TREENODE).Where(IsNull(PARENT_ID)) + + + Select(TREENODE(ID, NAME, PARENT_ID)).From(TREENODE, TN) + .Where(TREENODE(PARENT_ID) == TN(ID))) + .With(TNSIZE)(ID, COUNT) + .As(Select(ID, + SqlCountRows()) + .From(TN) + .GroupBy(PARENT_ID)) + (Update(TABLE1)(COL, Select(COUNT).From(TNSIZE).Where(TNSIZE(ID) == TABLE1(ID)).AsValue())) + ); + #ifdef GENERATE_QTF qtf << "}}";