I have trouble to move up node on sqlite on mysql i write: UPDATE SET rgt = rgt + IF(rgt<%1,%2,-%3) on sqlite i must rewrite query to UPDATE SET rgt = (SELECT CASE WHEN (rgt < %1) THEN rgt + %2 ELSE rgt + -%3 END) is here a way to create a trigger or similar on sqlite to support IF(expression,int or string,int or string) and use the same query?
detail code... /* nested tree table */ /* create table catememo ( id INTEGER PRIMARY KEY AUTOINCREMENT, root_id INTEGER, name varchar(110), lft INTEGER, rgt INTEGER, oldid INTEGER, attribute BLOB)"); online demo http://www.klempert.de/nested_sets/demo/ show tree SELECT n.*, round((n.rgt-n.lft-1)/2,0) AS childs, count(*)+(n.lft>1) AS level, ((min(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower, (( (n.lft-max(p.lft)>1) )) AS upper FROM catememo n, catememo p WHERE n.lft BETWEEN p.lft AND p.rgt AND (p.root_id = n.root_id) AND (p.id != n.id OR n.lft = 1) GROUP BY n.root_id,n.id ORDER BY n.root_id,n.lft" */ /* move node up */ /* mysql UPDATE SET rgt = rgt + IF(rgt<%1,%2,-%3) http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html IF(expr1,expr2,expr3) If expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2; otherwise it returns expr3. IF() returns a numeric or string value, depending on the context in which it is used. mysql> SELECT IF(1>2,2,3); -> 3 mysql> SELECT IF(1<2,'yes','no'); -> 'yes' mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); -> 'no' */ /* sqlite translate */ QString handleleft = QString("SET lft= (SELECT CASE WHEN (lft < %1) " "THEN lft + %2 ELSE lft + -%3 END), ") .arg(nn1left) .arg(inc) .arg(desc); QString handleright = QString("rgt= (SELECT CASE WHEN (rgt < %1) " "THEN rgt + %2 ELSE rgt + -%3 END)") .arg(nn1left) .arg(inc) .arg(desc); QString sqlup = QString("UPDATE %1 ").arg(table); sqlup.append(handleleft + handleright); sqlup.append(QString(" WHERE root_id= %1 AND lft>=%2 ").arg(r2.value("root_id").toInt()).arg(nn2left)); sqlup.append(QString("AND rgt<=%1 ").arg(nn1right)); qDebug() << " sqlup -> " << sqlup; if (query.exec(sqlup)) { /* reload table nested tree */ } _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users