Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /bathyscaphe/trunk/application/source/browser/BSThreadListUpdateTask.m

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 880 by masakih, Tue Dec 25 12:00:30 2007 UTC revision 917 by masakih, Sat Mar 22 14:35:01 2008 UTC
# Line 114  static inline NSString *whereClauseFromS Line 114  static inline NSString *whereClauseFromS
114          return clause;          return clause;
115  }  }
116    
117  enum {  - (NSString *) sqlForList
         kNewerThreadType,       // 新着検索  
         kOlderThreadType,       // 非新着検索  
         kAllThreadType,         // 全部!  
 };  
   
 // filter 処理と  
 // 新着のみもしくは非新着のみもしくはすべてのスレッドをDBから取得するための  
 // WHERE句を生成。  
 static inline NSString *conditionFromStatusAndType( int status, int type )  
 {  
         NSMutableString *result = [NSMutableString string];  
         NSString *brankOrAnd = @"";  
           
         if(status & ThreadLogCachedStatus &&  
            (type == kOlderThreadType || !(status & ThreadNewCreatedStatus))) {  
                 // 新着/既得スレッドで且つ既得分表示 もしくは 既得スレッド  
                 [result appendFormat : @"NOT %@ IS NULL\n", NumberOfReadColumn];  
                 brankOrAnd = @" AND ";  
         } else if(status & ThreadNoCacheStatus) {  
                 // 未取得スレッド  
                 [result appendFormat : @"%@ IS NULL\n", NumberOfReadColumn];  
                 brankOrAnd = @" AND ";  
         } else if(status & ThreadNewCreatedStatus && type == kOlderThreadType) {  
                 // 新着スレッドで且つ既得分表示。あり得ない boardID を指定し、要素数を0にする  
                 [result appendFormat : @"%@ < 0\n",BoardIDColumn];  
                 brankOrAnd = @" AND ";  
         } else if ((status == ~ThreadNoCacheStatus) && type == kAllThreadType) {  
                 // 新着スレッドを常に最上位にソート「しない」かつ「新着/既得スレッド」  
                 [result appendFormat:@"%@ > %u\n", ThreadStatusColumn, ThreadNoCacheStatus];  
         } else if ((status == (ThreadNewCreatedStatus ^ ThreadNoCacheStatus)) && type == kAllThreadType) {  
                 // 新着スレッドを常に最上位にソート「しない」かつ「新着スレッド」  
                 [result appendFormat:@"%@ = %u\n", ThreadStatusColumn, ThreadNewCreatedStatus];  
         }  
   
         switch(type) {  
                 case kNewerThreadType:    
                         [result appendFormat : @"%@%@ = %u\n",  
                                 brankOrAnd, ThreadStatusColumn, ThreadNewCreatedStatus];  
                         break;  
                 case kOlderThreadType:  
                         [result appendFormat : @"%@%@ != %u\n",  
                                 brankOrAnd, ThreadStatusColumn, ThreadNewCreatedStatus];  
                         break;  
                 case kAllThreadType:  
                         // Do nothing.  
                         break;  
                 default:  
                         UTILUnknownCSwitchCase(type);  
                         break;  
         }  
           
         return result;  
 }  
 - (NSString *) sqlForListForType : (int) type  
118  {  {
119          NSString *targetTable = [[target boardListItem] query];          NSString *targetTable = [[target boardListItem] query];
120          NSMutableString *sql;          NSMutableString *sql;
         NSString *whereOrAnd = @" WHERE ";  
121          NSString *searchCondition;          NSString *searchCondition;
         NSString *filterCondition;  
122                    
123          sql = [NSMutableString stringWithFormat : @"SELECT * FROM (%@) ",targetTable];          sql = [NSMutableString stringWithFormat : @"SELECT * FROM (%@) ",targetTable];
124                    
# Line 182  static inline NSString *conditionFromSta Line 126  static inline NSString *conditionFromSta
126                  searchCondition = whereClauseFromSearchString([target searchString]);                  searchCondition = whereClauseFromSearchString([target searchString]);
127                  if (searchCondition) {                  if (searchCondition) {
128                          [sql appendString : searchCondition];                          [sql appendString : searchCondition];
                         whereOrAnd = @" AND ";  
129                  }                  }
130          }          }
131                    
         filterCondition = conditionFromStatusAndType( [target status], type);  
         if(filterCondition && [filterCondition length] != 0) {  
                 [sql appendFormat : @"%@ %@\n", whereOrAnd, filterCondition];  
         }  
           
132          return sql;          return sql;
133  }  }
134  - (id)cursor  - (id)cursor
# Line 212  static inline NSString *conditionFromSta Line 150  static inline NSString *conditionFromSta
150                    
151          UTILAssertNotNil(db);          UTILAssertNotNil(db);
152                    
153          sql = [self sqlForListForType : kAllThreadType];          sql = [self sqlForList];
154          if(userCanceled) goto final;          if(userCanceled) goto final;
155          result = [db cursorForSQL : sql];          result = [db cursorForSQL : sql];
156          if ([db lastErrorID] != 0) {          if ([db lastErrorID] != 0) {

Legend:
Removed from v.880  
changed lines
  Added in v.917

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26