0

Im Trying to become a result set of query using FMResultSet in objective-c

- (NSMutableArray*) buildArrayArticlesWithArticleContainer:       (CSTArticleContainer*)articleContainer andSearchString:(NSString*)searchString andLanguageId:(NSString*)languageId
{
NSString* tmpSearchString = [searchString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSArray* arraySearchWords = [tmpSearchString componentsSeparatedByString:@" "];
if([arraySearchWords count] < 1)
    return nil;


NSMutableString* selectStmt = [NSMutableString stringWithString:[self sqlBaseSelectSearchArticleWithMatchcode]];
[selectStmt appendString:[self createSqlWhereClauseForSearchArticleWithMatchcodeForSeachStringCount:[arraySearchWords count]]];


FMDatabase *db = [FMDatabase databaseWithPath:[Utility getDatabasePath]];
[db open];


NSMutableArray* arrayArticles = [[NSMutableArray alloc] init];
NSMutableArray* argumentsArray = [[NSMutableArray alloc] init];

[argumentsArray addObject: languageId];

for( int i=0; i<[arraySearchWords count]; i++ )
{
    [argumentsArray addObject: [NSString stringWithFormat:@"%%%@%%", [[arraySearchWords objectAtIndex:i] uppercaseString]]];
}
FMResultSet *resultSet = [db executeQuery:[selectStmt description] withArgumentsInArray:argumentsArray];
CSTArticle* newArticle = nil;
NSDictionary *adict=  resultSet.resultDictionary;
NSLog(adict.description);

while([resultSet next])
{
    newArticle = [CSTArticleContainer buildArticleFromResultSet:resultSet];
    [arrayArticles addObject:newArticle];
}

[db close];
return arrayArticles;
}

THE Query is:

SELECT DISTINCT
PRODUCTCATALOGROWS.ORDERNR,
ARTICLES.*,
ART_NLSDATA.DESCRIPTION AS DESCRIPTION,
ART_NLSDATA.LONGTEXT AS LONGTEXT,
ARTPICTURE.THUMBNAIL AS THUMBNAIL,
ARTPICTURE.FULLIMAGEURL AS FULLIMAGEURL
FROM
ARTICLES
JOIN ART_NLSDATA ON ARTICLES.ARTICLEID = ART_NLSDATA.ARTICLEID
JOIN PRODUCTCATALOGROWS ON ARTICLES.ARTICLEID = PRODUCTCATALOGROWS.ARTICLEID
LEFT OUTER JOIN ARTPICTURE ON ARTICLES.ARTICLEID = ARTPICTURE.ARTICLEID
WHERE
ART_NLSDATA.LANGUAGEID =2
AND(
(ART_NLSDATA.MATCHCODE LIKE '%mbr%')
AND(ART_NLSDATA.MATCHCODE LIKE '%tr%')
)
AND ARTICLES.VALIDTO >= datetime('now')
ORDER BY
ARTICLES.ARTICLEID ASC

It is strange if the concatenated like statement is only one the it works in navigate lite the sql elapsed time to become a response ist 0,09 sec

rmaddy
  • 314,917
  • 42
  • 532
  • 579
Fabi
  • 1
  • 1
  • Is it really an "infinite loop" or just exceedingly slow? Or returning nothing where you expected something? – Rob Jul 23 '14 at 18:09
  • I tried to wait and : if I use the simulator it coms a result after 30 Min. but on the device there is no result i broken the waiting after 3 hours – Fabi Jul 24 '14 at 07:24

1 Answers1

0

I resolved my trouble. Changing the SQL query

SELECT DISTINCT
PRODUCTCATALOGROWS.ORDERNR,
ARTICLES.*,
ART_NLSDATA.DESCRIPTION AS DESCRIPTION,
ART_NLSDATA.LONGTEXT AS LONGTEXT,
ARTPICTURE.THUMBNAIL AS THUMBNAIL,
ARTPICTURE.FULLIMAGEURL AS FULLIMAGEURL
FROM
ARTICLES , ART_NLSDATA , PRODUCTCATALOGROWS
LEFT OUTER JOIN ARTPICTURE ON ARTICLES.ARTICLEID = ARTPICTURE.ARTICLEID
WHERE
ARTICLES.ARTICLEID = ART_NLSDATA.ARTICLEID
AND ARTICLES.ARTICLEID = PRODUCTCATALOGROWS.ARTICLEID

AND ART_NLSDATA.LANGUAGEID =2
AND ( (ART_NLSDATA.MATCHCODE LIKE '%mbr%')
AND (ART_NLSDATA.MATCHCODE LIKE '%tr%'))
AND ARTICLES.VALIDTO >= datetime('now')
ORDER BY
ARTICLES.ARTICLEID ASC

I don't Know way but it is so.

Fabi
  • 1
  • 1