[cosmetics] update date in GPL header
[vuplus_xbmc] / xbmc / utils / test / TestDatabaseUtils.cpp
1 /*
2  *      Copyright (C) 2005-2013 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, see
17  *  <http://www.gnu.org/licenses/>.
18  *
19  */
20
21 #include "utils/DatabaseUtils.h"
22 #include "video/VideoDatabase.h"
23 #include "music/MusicDatabase.h"
24 #include "dbwrappers/qry_dat.h"
25 #include "utils/Variant.h"
26
27 #include "gtest/gtest.h"
28
29 class TestDatabaseUtilsHelper
30 {
31 public:
32   TestDatabaseUtilsHelper()
33   {
34     album_idAlbum = CMusicDatabase::album_idAlbum;
35     album_strAlbum = CMusicDatabase::album_strAlbum;
36     album_strArtists = CMusicDatabase::album_strArtists;
37     album_strGenres = CMusicDatabase::album_strGenres;
38     album_iYear = CMusicDatabase::album_iYear;
39     album_strMoods = CMusicDatabase::album_strMoods;
40     album_strStyles = CMusicDatabase::album_strStyles;
41     album_strThemes = CMusicDatabase::album_strThemes;
42     album_strReview = CMusicDatabase::album_strReview;
43     album_strLabel = CMusicDatabase::album_strLabel;
44     album_strType = CMusicDatabase::album_strType;
45     album_iRating = CMusicDatabase::album_iRating;
46
47     song_idSong = CMusicDatabase::song_idSong;
48     song_strTitle = CMusicDatabase::song_strTitle;
49     song_iTrack = CMusicDatabase::song_iTrack;
50     song_iDuration = CMusicDatabase::song_iDuration;
51     song_iYear = CMusicDatabase::song_iYear;
52     song_strFileName = CMusicDatabase::song_strFileName;
53     song_iTimesPlayed = CMusicDatabase::song_iTimesPlayed;
54     song_iStartOffset = CMusicDatabase::song_iStartOffset;
55     song_iEndOffset = CMusicDatabase::song_iEndOffset;
56     song_lastplayed = CMusicDatabase::song_lastplayed;
57     song_rating = CMusicDatabase::song_rating;
58     song_comment = CMusicDatabase::song_comment;
59     song_strAlbum = CMusicDatabase::song_strAlbum;
60     song_strPath = CMusicDatabase::song_strPath;
61     song_strGenres = CMusicDatabase::song_strGenres;
62     song_strArtists = CMusicDatabase::song_strArtists;
63   }
64
65   int album_idAlbum;
66   int album_strAlbum;
67   int album_strArtists;
68   int album_strGenres;
69   int album_iYear;
70   int album_strMoods;
71   int album_strStyles;
72   int album_strThemes;
73   int album_strReview;
74   int album_strLabel;
75   int album_strType;
76   int album_iRating;
77
78   int song_idSong;
79   int song_strTitle;
80   int song_iTrack;
81   int song_iDuration;
82   int song_iYear;
83   int song_strFileName;
84   int song_iTimesPlayed;
85   int song_iStartOffset;
86   int song_iEndOffset;
87   int song_lastplayed;
88   int song_rating;
89   int song_comment;
90   int song_strAlbum;
91   int song_strPath;
92   int song_strGenres;
93   int song_strArtists;
94 };
95
96 TEST(TestDatabaseUtils, MediaTypeToString)
97 {
98   std::string refstr, varstr;
99
100   refstr = "";
101   varstr = DatabaseUtils::MediaTypeToString(MediaTypeNone);
102   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
103
104   refstr = "music";
105   varstr = DatabaseUtils::MediaTypeToString(MediaTypeMusic);
106   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
107
108   refstr = "artist";
109   varstr = DatabaseUtils::MediaTypeToString(MediaTypeArtist);
110   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
111
112   refstr = "album";
113   varstr = DatabaseUtils::MediaTypeToString(MediaTypeAlbum);
114   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
115
116   refstr = "song";
117   varstr = DatabaseUtils::MediaTypeToString(MediaTypeSong);
118   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
119
120   refstr = "video";
121   varstr = DatabaseUtils::MediaTypeToString(MediaTypeVideo);
122   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
123
124   refstr = "set";
125   varstr = DatabaseUtils::MediaTypeToString(MediaTypeVideoCollection);
126   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
127
128   refstr = "musicvideo";
129   varstr = DatabaseUtils::MediaTypeToString(MediaTypeMusicVideo);
130   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
131
132   refstr = "movie";
133   varstr = DatabaseUtils::MediaTypeToString(MediaTypeMovie);
134   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
135
136   refstr = "tvshow";
137   varstr = DatabaseUtils::MediaTypeToString(MediaTypeTvShow);
138   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
139
140   refstr = "episode";
141   varstr = DatabaseUtils::MediaTypeToString(MediaTypeEpisode);
142   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
143 }
144
145 TEST(TestDatabaseUtils, MediaTypeFromString)
146 {
147   int refmediatype, varmediatype;
148
149   refmediatype = MediaTypeNone;
150   varmediatype = DatabaseUtils::MediaTypeFromString("");
151   EXPECT_EQ(refmediatype, varmediatype);
152
153   refmediatype = MediaTypeMusic;
154   varmediatype = DatabaseUtils::MediaTypeFromString("music");
155   EXPECT_EQ(refmediatype, varmediatype);
156
157   refmediatype = MediaTypeArtist;
158   varmediatype = DatabaseUtils::MediaTypeFromString("artist");
159   EXPECT_EQ(refmediatype, varmediatype);
160
161   refmediatype = MediaTypeAlbum;
162   varmediatype = DatabaseUtils::MediaTypeFromString("album");
163   EXPECT_EQ(refmediatype, varmediatype);
164
165   refmediatype = MediaTypeSong;
166   varmediatype = DatabaseUtils::MediaTypeFromString("song");
167   EXPECT_EQ(refmediatype, varmediatype);
168
169   refmediatype = MediaTypeVideo;
170   varmediatype = DatabaseUtils::MediaTypeFromString("video");
171   EXPECT_EQ(refmediatype, varmediatype);
172
173   refmediatype = MediaTypeVideoCollection;
174   varmediatype = DatabaseUtils::MediaTypeFromString("set");
175   EXPECT_EQ(refmediatype, varmediatype);
176
177   refmediatype = MediaTypeMusicVideo;
178   varmediatype = DatabaseUtils::MediaTypeFromString("musicvideo");
179   EXPECT_EQ(refmediatype, varmediatype);
180
181   refmediatype = MediaTypeMovie;
182   varmediatype = DatabaseUtils::MediaTypeFromString("movie");
183   EXPECT_EQ(refmediatype, varmediatype);
184
185   refmediatype = MediaTypeTvShow;
186   varmediatype = DatabaseUtils::MediaTypeFromString("tvshow");
187   EXPECT_EQ(refmediatype, varmediatype);
188
189   refmediatype = MediaTypeEpisode;
190   varmediatype = DatabaseUtils::MediaTypeFromString("episode");
191   EXPECT_EQ(refmediatype, varmediatype);
192 }
193
194 TEST(TestDatabaseUtils, GetField_None)
195 {
196   std::string refstr, varstr;
197
198   refstr = "";
199   varstr = DatabaseUtils::GetField(FieldNone, MediaTypeNone,
200                                    DatabaseQueryPartSelect);
201   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
202
203   varstr = DatabaseUtils::GetField(FieldNone, MediaTypeMovie,
204                                    DatabaseQueryPartSelect);
205   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
206 }
207
208 TEST(TestDatabaseUtils, GetField_MediaTypeAlbum)
209 {
210   std::string refstr, varstr;
211
212   refstr = "albumview.idAlbum";
213   varstr = DatabaseUtils::GetField(FieldId, MediaTypeAlbum,
214                                    DatabaseQueryPartSelect);
215   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
216
217   refstr = "albumview.strAlbum";
218   varstr = DatabaseUtils::GetField(FieldAlbum, MediaTypeAlbum,
219                                    DatabaseQueryPartSelect);
220   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
221
222   refstr = "albumview.strArtists";
223   varstr = DatabaseUtils::GetField(FieldArtist, MediaTypeAlbum,
224                                    DatabaseQueryPartSelect);
225   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
226
227   refstr = "albumview.strArtists";
228   varstr = DatabaseUtils::GetField(FieldAlbumArtist, MediaTypeAlbum,
229                                    DatabaseQueryPartSelect);
230   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
231
232   refstr = "albumview.strGenre";
233   varstr = DatabaseUtils::GetField(FieldGenre, MediaTypeAlbum,
234                                    DatabaseQueryPartSelect);
235   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
236
237   refstr = "albumview.iYear";
238   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeAlbum,
239                                    DatabaseQueryPartSelect);
240   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
241
242   refstr = "albumview.strMoods";
243   varstr = DatabaseUtils::GetField(FieldMoods, MediaTypeAlbum,
244                                    DatabaseQueryPartSelect);
245   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
246
247   refstr = "albumview.strStyles";
248   varstr = DatabaseUtils::GetField(FieldStyles, MediaTypeAlbum,
249                                    DatabaseQueryPartSelect);
250   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
251
252   refstr = "albumview.strThemes";
253   varstr = DatabaseUtils::GetField(FieldThemes, MediaTypeAlbum,
254                                    DatabaseQueryPartSelect);
255   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
256
257   refstr = "albumview.strReview";
258   varstr = DatabaseUtils::GetField(FieldReview, MediaTypeAlbum,
259                                    DatabaseQueryPartSelect);
260   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
261
262   refstr = "albumview.strLabel";
263   varstr = DatabaseUtils::GetField(FieldMusicLabel, MediaTypeAlbum,
264                                    DatabaseQueryPartSelect);
265   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
266
267   refstr = "albumview.strType";
268   varstr = DatabaseUtils::GetField(FieldAlbumType, MediaTypeAlbum,
269                                    DatabaseQueryPartSelect);
270   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
271
272   refstr = "albumview.iRating";
273   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeAlbum,
274                                    DatabaseQueryPartSelect);
275   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
276
277   refstr = "albumview.idalbum";
278   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeAlbum,
279                                    DatabaseQueryPartOrderBy);
280   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
281
282   refstr = "";
283   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeAlbum,
284                                    DatabaseQueryPartSelect);
285   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
286
287   refstr = "albumview.strAlbum";
288   varstr = DatabaseUtils::GetField(FieldAlbum, MediaTypeAlbum,
289                                    DatabaseQueryPartWhere);
290   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
291
292   varstr = DatabaseUtils::GetField(FieldAlbum, MediaTypeAlbum,
293                                    DatabaseQueryPartOrderBy);
294   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
295 }
296
297 TEST(TestDatabaseUtils, GetField_MediaTypeSong)
298 {
299   std::string refstr, varstr;
300
301   refstr = "songview.idSong";
302   varstr = DatabaseUtils::GetField(FieldId, MediaTypeSong,
303                                    DatabaseQueryPartSelect);
304   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
305
306   refstr = "songview.strTitle";
307   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeSong,
308                                    DatabaseQueryPartSelect);
309   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
310
311   refstr = "songview.iTrack";
312   varstr = DatabaseUtils::GetField(FieldTrackNumber, MediaTypeSong,
313                                    DatabaseQueryPartSelect);
314   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
315
316   refstr = "songview.iDuration";
317   varstr = DatabaseUtils::GetField(FieldTime, MediaTypeSong,
318                                    DatabaseQueryPartSelect);
319   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
320
321   refstr = "songview.iYear";
322   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeSong,
323                                    DatabaseQueryPartSelect);
324   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
325
326   refstr = "songview.strFilename";
327   varstr = DatabaseUtils::GetField(FieldFilename, MediaTypeSong,
328                                    DatabaseQueryPartSelect);
329   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
330
331   refstr = "songview.iTimesPlayed";
332   varstr = DatabaseUtils::GetField(FieldPlaycount, MediaTypeSong,
333                                    DatabaseQueryPartSelect);
334   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
335
336   refstr = "songview.iStartOffset";
337   varstr = DatabaseUtils::GetField(FieldStartOffset, MediaTypeSong,
338                                    DatabaseQueryPartSelect);
339   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
340
341   refstr = "songview.iEndOffset";
342   varstr = DatabaseUtils::GetField(FieldEndOffset, MediaTypeSong,
343                                    DatabaseQueryPartSelect);
344   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
345
346   refstr = "songview.lastPlayed";
347   varstr = DatabaseUtils::GetField(FieldLastPlayed, MediaTypeSong,
348                                    DatabaseQueryPartSelect);
349   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
350
351   refstr = "songview.rating";
352   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeSong,
353                                    DatabaseQueryPartSelect);
354   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
355
356   refstr = "songview.comment";
357   varstr = DatabaseUtils::GetField(FieldComment, MediaTypeSong,
358                                    DatabaseQueryPartSelect);
359   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
360
361   refstr = "songview.strAlbum";
362   varstr = DatabaseUtils::GetField(FieldAlbum, MediaTypeSong,
363                                    DatabaseQueryPartSelect);
364   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
365
366   refstr = "songview.strPath";
367   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeSong,
368                                    DatabaseQueryPartSelect);
369   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
370
371   refstr = "songview.strArtists";
372   varstr = DatabaseUtils::GetField(FieldArtist, MediaTypeSong,
373                                    DatabaseQueryPartSelect);
374   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
375
376   refstr = "songview.strArtists";
377   varstr = DatabaseUtils::GetField(FieldAlbumArtist, MediaTypeSong,
378                                    DatabaseQueryPartSelect);
379   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
380
381   refstr = "songview.strGenre";
382   varstr = DatabaseUtils::GetField(FieldGenre, MediaTypeSong,
383                                    DatabaseQueryPartSelect);
384   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
385
386   refstr = "songview.idSong";
387   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeSong,
388                                    DatabaseQueryPartOrderBy);
389   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
390
391   refstr = "";
392   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeSong,
393                                    DatabaseQueryPartSelect);
394   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
395
396   refstr = "songview.strPath";
397   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeSong,
398                                    DatabaseQueryPartWhere);
399   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
400
401   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeSong,
402                                    DatabaseQueryPartOrderBy);
403   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
404 }
405
406 TEST(TestDatabaseUtils, GetField_MediaTypeMusicVideo)
407 {
408   CStdString refstr, varstr;
409
410   refstr = "musicvideoview.idMVideo";
411   varstr = DatabaseUtils::GetField(FieldId, MediaTypeMusicVideo,
412                                    DatabaseQueryPartSelect);
413   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
414
415   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_TITLE);
416   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeMusicVideo,
417                                    DatabaseQueryPartSelect);
418   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
419
420   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_RUNTIME);
421   varstr = DatabaseUtils::GetField(FieldTime, MediaTypeMusicVideo,
422                                    DatabaseQueryPartSelect);
423   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
424
425   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_DIRECTOR);
426   varstr = DatabaseUtils::GetField(FieldDirector, MediaTypeMusicVideo,
427                                    DatabaseQueryPartSelect);
428   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
429
430   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_STUDIOS);
431   varstr = DatabaseUtils::GetField(FieldStudio, MediaTypeMusicVideo,
432                                    DatabaseQueryPartSelect);
433   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
434
435   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_YEAR);
436   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeMusicVideo,
437                                    DatabaseQueryPartSelect);
438   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
439
440   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_PLOT);
441   varstr = DatabaseUtils::GetField(FieldPlot, MediaTypeMusicVideo,
442                                    DatabaseQueryPartSelect);
443   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
444
445   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_ALBUM);
446   varstr = DatabaseUtils::GetField(FieldAlbum, MediaTypeMusicVideo,
447                                    DatabaseQueryPartSelect);
448   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
449
450   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_ARTIST);
451   varstr = DatabaseUtils::GetField(FieldArtist, MediaTypeMusicVideo,
452                                    DatabaseQueryPartSelect);
453   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
454
455   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_GENRE);
456   varstr = DatabaseUtils::GetField(FieldGenre, MediaTypeMusicVideo,
457                                    DatabaseQueryPartSelect);
458   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
459
460   refstr.Format("musicvideoview.c%02d",VIDEODB_ID_MUSICVIDEO_TRACK);
461   varstr = DatabaseUtils::GetField(FieldTrackNumber, MediaTypeMusicVideo,
462                                    DatabaseQueryPartSelect);
463   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
464
465   refstr = "musicvideoview.strFilename";
466   varstr = DatabaseUtils::GetField(FieldFilename, MediaTypeMusicVideo,
467                                    DatabaseQueryPartSelect);
468   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
469
470   refstr = "musicvideoview.strPath";
471   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeMusicVideo,
472                                    DatabaseQueryPartSelect);
473   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
474
475   refstr = "musicvideoview.playCount";
476   varstr = DatabaseUtils::GetField(FieldPlaycount, MediaTypeMusicVideo,
477                                    DatabaseQueryPartSelect);
478   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
479
480   refstr = "musicvideoview.lastPlayed";
481   varstr = DatabaseUtils::GetField(FieldLastPlayed, MediaTypeMusicVideo,
482                                    DatabaseQueryPartSelect);
483   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
484
485   refstr = "musicvideoview.dateAdded";
486   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeMusicVideo,
487                                    DatabaseQueryPartSelect);
488   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
489
490   refstr = "";
491   varstr = DatabaseUtils::GetField(FieldVideoResolution, MediaTypeMusicVideo,
492                                    DatabaseQueryPartSelect);
493   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
494
495   refstr = "musicvideoview.strPath";
496   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeMusicVideo,
497                                    DatabaseQueryPartWhere);
498   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
499
500   refstr = "musicvideoview.strPath";
501   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeMusicVideo,
502                                    DatabaseQueryPartOrderBy);
503   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
504 }
505
506 TEST(TestDatabaseUtils, GetField_MediaTypeMovie)
507 {
508   CStdString refstr, varstr;
509
510   refstr = "movieview.idMovie";
511   varstr = DatabaseUtils::GetField(FieldId, MediaTypeMovie,
512                                    DatabaseQueryPartSelect);
513   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
514
515   refstr.Format("movieview.c%02d", VIDEODB_ID_TITLE);
516   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeMovie,
517                                    DatabaseQueryPartSelect);
518   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
519
520   refstr.Format("CASE WHEN length(movieview.c%02d) > 0 THEN movieview.c%02d "
521                 "ELSE movieview.c%02d END", VIDEODB_ID_SORTTITLE,
522                 VIDEODB_ID_SORTTITLE, VIDEODB_ID_TITLE, VIDEODB_ID_TITLE);
523   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeMovie,
524                                    DatabaseQueryPartOrderBy);
525   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
526
527   refstr.Format("movieview.c%02d", VIDEODB_ID_PLOT);
528   varstr = DatabaseUtils::GetField(FieldPlot, MediaTypeMovie,
529                                    DatabaseQueryPartSelect);
530   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
531
532   refstr.Format("movieview.c%02d", VIDEODB_ID_PLOTOUTLINE);
533   varstr = DatabaseUtils::GetField(FieldPlotOutline, MediaTypeMovie,
534                                    DatabaseQueryPartSelect);
535   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
536
537   refstr.Format("movieview.c%02d", VIDEODB_ID_TAGLINE);
538   varstr = DatabaseUtils::GetField(FieldTagline, MediaTypeMovie,
539                                    DatabaseQueryPartSelect);
540   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
541
542   refstr.Format("movieview.c%02d", VIDEODB_ID_VOTES);
543   varstr = DatabaseUtils::GetField(FieldVotes, MediaTypeMovie,
544                                    DatabaseQueryPartSelect);
545   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
546
547   refstr.Format("movieview.c%02d", VIDEODB_ID_RATING);
548   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeMovie,
549                                    DatabaseQueryPartSelect);
550   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
551
552   refstr.Format("CAST(movieview.c%02d as DECIMAL(5,3))", VIDEODB_ID_RATING);
553   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeMovie,
554                                    DatabaseQueryPartOrderBy);
555   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
556
557   refstr.Format("movieview.c%02d", VIDEODB_ID_CREDITS);
558   varstr = DatabaseUtils::GetField(FieldWriter, MediaTypeMovie,
559                                    DatabaseQueryPartSelect);
560   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
561
562   refstr.Format("movieview.c%02d", VIDEODB_ID_YEAR);
563   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeMovie,
564                                    DatabaseQueryPartSelect);
565   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
566
567   refstr.Format("movieview.c%02d", VIDEODB_ID_SORTTITLE);
568   varstr = DatabaseUtils::GetField(FieldSortTitle, MediaTypeMovie,
569                                    DatabaseQueryPartSelect);
570   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
571
572   refstr.Format("movieview.c%02d", VIDEODB_ID_RUNTIME);
573   varstr = DatabaseUtils::GetField(FieldTime, MediaTypeMovie,
574                                    DatabaseQueryPartSelect);
575   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
576
577   refstr.Format("movieview.c%02d", VIDEODB_ID_MPAA);
578   varstr = DatabaseUtils::GetField(FieldMPAA, MediaTypeMovie,
579                                    DatabaseQueryPartSelect);
580   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
581
582   refstr.Format("movieview.c%02d", VIDEODB_ID_TOP250);
583   varstr = DatabaseUtils::GetField(FieldTop250, MediaTypeMovie,
584                                    DatabaseQueryPartSelect);
585   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
586
587   refstr.Format("movieview.c%02d", VIDEODB_ID_GENRE);
588   varstr = DatabaseUtils::GetField(FieldGenre, MediaTypeMovie,
589                                    DatabaseQueryPartSelect);
590   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
591
592   refstr.Format("movieview.c%02d", VIDEODB_ID_DIRECTOR);
593   varstr = DatabaseUtils::GetField(FieldDirector, MediaTypeMovie,
594                                    DatabaseQueryPartSelect);
595   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
596
597   refstr.Format("movieview.c%02d", VIDEODB_ID_STUDIOS);
598   varstr = DatabaseUtils::GetField(FieldStudio, MediaTypeMovie,
599                                    DatabaseQueryPartSelect);
600   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
601
602   refstr.Format("movieview.c%02d", VIDEODB_ID_TRAILER);
603   varstr = DatabaseUtils::GetField(FieldTrailer, MediaTypeMovie,
604                                    DatabaseQueryPartSelect);
605   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
606
607   refstr.Format("movieview.c%02d", VIDEODB_ID_COUNTRY);
608   varstr = DatabaseUtils::GetField(FieldCountry, MediaTypeMovie,
609                                    DatabaseQueryPartSelect);
610   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
611
612   refstr = "movieview.strFilename";
613   varstr = DatabaseUtils::GetField(FieldFilename, MediaTypeMovie,
614                                    DatabaseQueryPartSelect);
615   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
616
617   refstr = "movieview.strPath";
618   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeMovie,
619                                    DatabaseQueryPartSelect);
620   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
621
622   refstr = "movieview.playCount";
623   varstr = DatabaseUtils::GetField(FieldPlaycount, MediaTypeMovie,
624                                    DatabaseQueryPartSelect);
625   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
626
627   refstr = "movieview.lastPlayed";
628   varstr = DatabaseUtils::GetField(FieldLastPlayed, MediaTypeMovie,
629                                    DatabaseQueryPartSelect);
630   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
631
632   refstr = "movieview.dateAdded";
633   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeMovie,
634                                    DatabaseQueryPartSelect);
635   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
636
637   refstr = "";
638   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeMovie,
639                                    DatabaseQueryPartSelect);
640   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
641 }
642
643 TEST(TestDatabaseUtils, GetField_MediaTypeTvShow)
644 {
645   CStdString refstr, varstr;
646
647   refstr = "tvshowview.idShow";
648   varstr = DatabaseUtils::GetField(FieldId, MediaTypeTvShow,
649                                    DatabaseQueryPartSelect);
650   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
651
652   refstr.Format("CASE WHEN length(tvshowview.c%02d) > 0 THEN tvshowview.c%02d "
653                 "ELSE tvshowview.c%02d END", VIDEODB_ID_TV_SORTTITLE,
654                 VIDEODB_ID_TV_SORTTITLE, VIDEODB_ID_TV_TITLE);
655   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeTvShow,
656                                    DatabaseQueryPartOrderBy);
657   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
658
659   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_TITLE);
660   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeTvShow,
661                                    DatabaseQueryPartSelect);
662   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
663
664   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_PLOT);
665   varstr = DatabaseUtils::GetField(FieldPlot, MediaTypeTvShow,
666                                    DatabaseQueryPartSelect);
667   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
668
669   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_STATUS);
670   varstr = DatabaseUtils::GetField(FieldTvShowStatus, MediaTypeTvShow,
671                                    DatabaseQueryPartSelect);
672   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
673
674   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_VOTES);
675   varstr = DatabaseUtils::GetField(FieldVotes, MediaTypeTvShow,
676                                    DatabaseQueryPartSelect);
677   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
678
679   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_RATING);
680   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeTvShow,
681                                    DatabaseQueryPartSelect);
682   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
683
684   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_PREMIERED);
685   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeTvShow,
686                                    DatabaseQueryPartSelect);
687   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
688
689   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_GENRE);
690   varstr = DatabaseUtils::GetField(FieldGenre, MediaTypeTvShow,
691                                    DatabaseQueryPartSelect);
692   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
693
694   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_MPAA);
695   varstr = DatabaseUtils::GetField(FieldMPAA, MediaTypeTvShow,
696                                    DatabaseQueryPartSelect);
697   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
698
699   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_STUDIOS);
700   varstr = DatabaseUtils::GetField(FieldStudio, MediaTypeTvShow,
701                                    DatabaseQueryPartSelect);
702   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
703
704   refstr.Format("tvshowview.c%02d", VIDEODB_ID_TV_SORTTITLE);
705   varstr = DatabaseUtils::GetField(FieldSortTitle, MediaTypeTvShow,
706                                    DatabaseQueryPartSelect);
707   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
708
709   refstr = "tvshowview.strPath";
710   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeTvShow,
711                                    DatabaseQueryPartSelect);
712   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
713
714   refstr = "tvshowview.dateAdded";
715   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeTvShow,
716                                    DatabaseQueryPartSelect);
717   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
718
719   refstr = "tvshowview.totalSeasons";
720   varstr = DatabaseUtils::GetField(FieldSeason, MediaTypeTvShow,
721                                    DatabaseQueryPartSelect);
722   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
723
724   refstr = "tvshowview.totalCount";
725   varstr = DatabaseUtils::GetField(FieldNumberOfEpisodes, MediaTypeTvShow,
726                                    DatabaseQueryPartSelect);
727   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
728
729   refstr = "tvshowview.watchedcount";
730   varstr = DatabaseUtils::GetField(FieldNumberOfWatchedEpisodes,
731                                    MediaTypeTvShow, DatabaseQueryPartSelect);
732   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
733
734   refstr = "";
735   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeTvShow,
736                                    DatabaseQueryPartSelect);
737   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
738 }
739
740 TEST(TestDatabaseUtils, GetField_MediaTypeEpisode)
741 {
742   CStdString refstr, varstr;
743
744   refstr = "episodeview.idEpisode";
745   varstr = DatabaseUtils::GetField(FieldId, MediaTypeEpisode,
746                                    DatabaseQueryPartSelect);
747   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
748
749   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_TITLE);
750   varstr = DatabaseUtils::GetField(FieldTitle, MediaTypeEpisode,
751                                    DatabaseQueryPartSelect);
752   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
753
754   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_PLOT);
755   varstr = DatabaseUtils::GetField(FieldPlot, MediaTypeEpisode,
756                                    DatabaseQueryPartSelect);
757   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
758
759   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_VOTES);
760   varstr = DatabaseUtils::GetField(FieldVotes, MediaTypeEpisode,
761                                    DatabaseQueryPartSelect);
762   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
763
764   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_RATING);
765   varstr = DatabaseUtils::GetField(FieldRating, MediaTypeEpisode,
766                                    DatabaseQueryPartSelect);
767   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
768
769   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_CREDITS);
770   varstr = DatabaseUtils::GetField(FieldWriter, MediaTypeEpisode,
771                                    DatabaseQueryPartSelect);
772   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
773
774   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_AIRED);
775   varstr = DatabaseUtils::GetField(FieldAirDate, MediaTypeEpisode,
776                                    DatabaseQueryPartSelect);
777   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
778
779   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_RUNTIME);
780   varstr = DatabaseUtils::GetField(FieldTime, MediaTypeEpisode,
781                                    DatabaseQueryPartSelect);
782   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
783
784   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_DIRECTOR);
785   varstr = DatabaseUtils::GetField(FieldDirector, MediaTypeEpisode,
786                                    DatabaseQueryPartSelect);
787   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
788
789   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_SEASON);
790   varstr = DatabaseUtils::GetField(FieldSeason, MediaTypeEpisode,
791                                    DatabaseQueryPartSelect);
792   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
793
794   refstr.Format("episodeview.c%02d", VIDEODB_ID_EPISODE_EPISODE);
795   varstr = DatabaseUtils::GetField(FieldEpisodeNumber, MediaTypeEpisode,
796                                    DatabaseQueryPartSelect);
797   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
798
799   refstr = "episodeview.strFilename";
800   varstr = DatabaseUtils::GetField(FieldFilename, MediaTypeEpisode,
801                                    DatabaseQueryPartSelect);
802   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
803
804   refstr = "episodeview.strPath";
805   varstr = DatabaseUtils::GetField(FieldPath, MediaTypeEpisode,
806                                    DatabaseQueryPartSelect);
807   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
808
809   refstr = "episodeview.playCount";
810   varstr = DatabaseUtils::GetField(FieldPlaycount, MediaTypeEpisode,
811                                    DatabaseQueryPartSelect);
812   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
813
814   refstr = "episodeview.lastPlayed";
815   varstr = DatabaseUtils::GetField(FieldLastPlayed, MediaTypeEpisode,
816                                    DatabaseQueryPartSelect);
817   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
818
819   refstr = "episodeview.dateAdded";
820   varstr = DatabaseUtils::GetField(FieldDateAdded, MediaTypeEpisode,
821                                    DatabaseQueryPartSelect);
822   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
823
824   refstr = "episodeview.strTitle";
825   varstr = DatabaseUtils::GetField(FieldTvShowTitle, MediaTypeEpisode,
826                                    DatabaseQueryPartSelect);
827   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
828
829   refstr = "episodeview.premiered";
830   varstr = DatabaseUtils::GetField(FieldYear, MediaTypeEpisode,
831                                    DatabaseQueryPartSelect);
832   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
833
834   refstr = "episodeview.mpaa";
835   varstr = DatabaseUtils::GetField(FieldMPAA, MediaTypeEpisode,
836                                    DatabaseQueryPartSelect);
837   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
838
839   refstr = "episodeview.strStudio";
840   varstr = DatabaseUtils::GetField(FieldStudio, MediaTypeEpisode,
841                                    DatabaseQueryPartSelect);
842   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
843
844   refstr = "";
845   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeEpisode,
846                                    DatabaseQueryPartSelect);
847   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
848 }
849
850 TEST(TestDatabaseUtils, GetField_FieldRandom)
851 {
852   std::string refstr, varstr;
853
854   refstr = "";
855   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeEpisode,
856                                    DatabaseQueryPartSelect);
857   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
858
859   refstr = "";
860   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeEpisode,
861                                    DatabaseQueryPartWhere);
862   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
863
864   refstr = "RANDOM()";
865   varstr = DatabaseUtils::GetField(FieldRandom, MediaTypeEpisode,
866                                    DatabaseQueryPartOrderBy);
867   EXPECT_STREQ(refstr.c_str(), varstr.c_str());
868 }
869
870 TEST(TestDatabaseUtils, GetFieldIndex_None)
871 {
872   int refindex, varindex;
873
874   refindex = -1;
875   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeNone);
876   EXPECT_EQ(refindex, varindex);
877
878   varindex = DatabaseUtils::GetFieldIndex(FieldNone, MediaTypeAlbum);
879   EXPECT_EQ(refindex, varindex);
880 }
881
882 /* TODO: Should enums in CMusicDatabase be made public instead? */
883 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeAlbum)
884 {
885   int refindex, varindex;
886   TestDatabaseUtilsHelper a;
887
888   refindex = a.album_idAlbum;
889   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeAlbum);
890   EXPECT_EQ(refindex, varindex);
891
892   refindex = a.album_strAlbum;
893   varindex = DatabaseUtils::GetFieldIndex(FieldAlbum, MediaTypeAlbum);
894   EXPECT_EQ(refindex, varindex);
895
896   refindex = a.album_strArtists;
897   varindex = DatabaseUtils::GetFieldIndex(FieldArtist, MediaTypeAlbum);
898   EXPECT_EQ(refindex, varindex);
899
900   refindex = a.album_strArtists;
901   varindex = DatabaseUtils::GetFieldIndex(FieldAlbumArtist, MediaTypeAlbum);
902   EXPECT_EQ(refindex, varindex);
903
904   refindex = a.album_strGenres;
905   varindex = DatabaseUtils::GetFieldIndex(FieldGenre, MediaTypeAlbum);
906   EXPECT_EQ(refindex, varindex);
907
908   refindex = a.album_iYear;
909   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeAlbum);
910   EXPECT_EQ(refindex, varindex);
911
912   refindex = a.album_strMoods;
913   varindex = DatabaseUtils::GetFieldIndex(FieldMoods, MediaTypeAlbum);
914   EXPECT_EQ(refindex, varindex);
915
916   refindex = a.album_strStyles;
917   varindex = DatabaseUtils::GetFieldIndex(FieldStyles, MediaTypeAlbum);
918   EXPECT_EQ(refindex, varindex);
919
920   refindex = a.album_strThemes;
921   varindex = DatabaseUtils::GetFieldIndex(FieldThemes, MediaTypeAlbum);
922   EXPECT_EQ(refindex, varindex);
923
924   refindex = a.album_strReview;
925   varindex = DatabaseUtils::GetFieldIndex(FieldReview, MediaTypeAlbum);
926   EXPECT_EQ(refindex, varindex);
927
928   refindex = a.album_strLabel;
929   varindex = DatabaseUtils::GetFieldIndex(FieldMusicLabel, MediaTypeAlbum);
930   EXPECT_EQ(refindex, varindex);
931
932   refindex = a.album_strType;
933   varindex = DatabaseUtils::GetFieldIndex(FieldAlbumType, MediaTypeAlbum);
934   EXPECT_EQ(refindex, varindex);
935
936   refindex = a.album_iRating;
937   varindex = DatabaseUtils::GetFieldIndex(FieldRating, MediaTypeAlbum);
938   EXPECT_EQ(refindex, varindex);
939
940   refindex = -1;
941   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeAlbum);
942   EXPECT_EQ(refindex, varindex);
943 }
944
945 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeSong)
946 {
947   int refindex, varindex;
948   TestDatabaseUtilsHelper a;
949
950   refindex = a.song_idSong;
951   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeSong);
952   EXPECT_EQ(refindex, varindex);
953
954   refindex = a.song_strTitle;
955   varindex = DatabaseUtils::GetFieldIndex(FieldTitle, MediaTypeSong);
956   EXPECT_EQ(refindex, varindex);
957
958   refindex = a.song_iTrack;
959   varindex = DatabaseUtils::GetFieldIndex(FieldTrackNumber, MediaTypeSong);
960   EXPECT_EQ(refindex, varindex);
961
962   refindex = a.song_iDuration;
963   varindex = DatabaseUtils::GetFieldIndex(FieldTime, MediaTypeSong);
964   EXPECT_EQ(refindex, varindex);
965
966   refindex = a.song_iYear;
967   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeSong);
968   EXPECT_EQ(refindex, varindex);
969
970   refindex = a.song_strFileName;
971   varindex = DatabaseUtils::GetFieldIndex(FieldFilename, MediaTypeSong);
972   EXPECT_EQ(refindex, varindex);
973
974   refindex = a.song_iTimesPlayed;
975   varindex = DatabaseUtils::GetFieldIndex(FieldPlaycount, MediaTypeSong);
976   EXPECT_EQ(refindex, varindex);
977
978   refindex = a.song_iStartOffset;
979   varindex = DatabaseUtils::GetFieldIndex(FieldStartOffset, MediaTypeSong);
980   EXPECT_EQ(refindex, varindex);
981
982   refindex = a.song_iEndOffset;
983   varindex = DatabaseUtils::GetFieldIndex(FieldEndOffset, MediaTypeSong);
984   EXPECT_EQ(refindex, varindex);
985
986   refindex = a.song_lastplayed;
987   varindex = DatabaseUtils::GetFieldIndex(FieldLastPlayed, MediaTypeSong);
988   EXPECT_EQ(refindex, varindex);
989
990   refindex = a.song_rating;
991   varindex = DatabaseUtils::GetFieldIndex(FieldRating, MediaTypeSong);
992   EXPECT_EQ(refindex, varindex);
993
994   refindex = a.song_comment;
995   varindex = DatabaseUtils::GetFieldIndex(FieldComment, MediaTypeSong);
996   EXPECT_EQ(refindex, varindex);
997
998   refindex = a.song_strAlbum;
999   varindex = DatabaseUtils::GetFieldIndex(FieldAlbum, MediaTypeSong);
1000   EXPECT_EQ(refindex, varindex);
1001
1002   refindex = a.song_strPath;
1003   varindex = DatabaseUtils::GetFieldIndex(FieldPath, MediaTypeSong);
1004   EXPECT_EQ(refindex, varindex);
1005
1006   refindex = a.song_strArtists;
1007   varindex = DatabaseUtils::GetFieldIndex(FieldArtist, MediaTypeSong);
1008   EXPECT_EQ(refindex, varindex);
1009
1010   refindex = a.song_strGenres;
1011   varindex = DatabaseUtils::GetFieldIndex(FieldGenre, MediaTypeSong);
1012   EXPECT_EQ(refindex, varindex);
1013
1014   refindex = -1;
1015   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeSong);
1016   EXPECT_EQ(refindex, varindex);
1017 }
1018
1019 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeMusicVideo)
1020 {
1021   int refindex, varindex;
1022
1023   refindex = 0;
1024   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeMusicVideo);
1025   EXPECT_EQ(refindex, varindex);
1026
1027   refindex = VIDEODB_ID_MUSICVIDEO_TITLE + 2;
1028   varindex = DatabaseUtils::GetFieldIndex(FieldTitle, MediaTypeMusicVideo);
1029   EXPECT_EQ(refindex, varindex);
1030
1031   refindex = VIDEODB_ID_MUSICVIDEO_RUNTIME + 2;
1032   varindex = DatabaseUtils::GetFieldIndex(FieldTime, MediaTypeMusicVideo);
1033   EXPECT_EQ(refindex, varindex);
1034
1035   refindex = VIDEODB_ID_MUSICVIDEO_DIRECTOR + 2;
1036   varindex = DatabaseUtils::GetFieldIndex(FieldDirector, MediaTypeMusicVideo);
1037   EXPECT_EQ(refindex, varindex);
1038
1039   refindex = VIDEODB_ID_MUSICVIDEO_STUDIOS + 2;
1040   varindex = DatabaseUtils::GetFieldIndex(FieldStudio, MediaTypeMusicVideo);
1041   EXPECT_EQ(refindex, varindex);
1042
1043   refindex = VIDEODB_ID_MUSICVIDEO_YEAR + 2;
1044   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeMusicVideo);
1045   EXPECT_EQ(refindex, varindex);
1046
1047   refindex = VIDEODB_ID_MUSICVIDEO_PLOT + 2;
1048   varindex = DatabaseUtils::GetFieldIndex(FieldPlot, MediaTypeMusicVideo);
1049   EXPECT_EQ(refindex, varindex);
1050
1051   refindex = VIDEODB_ID_MUSICVIDEO_ALBUM + 2;
1052   varindex = DatabaseUtils::GetFieldIndex(FieldAlbum, MediaTypeMusicVideo);
1053   EXPECT_EQ(refindex, varindex);
1054
1055   refindex = VIDEODB_ID_MUSICVIDEO_ARTIST + 2;
1056   varindex = DatabaseUtils::GetFieldIndex(FieldArtist, MediaTypeMusicVideo);
1057   EXPECT_EQ(refindex, varindex);
1058
1059   refindex = VIDEODB_ID_MUSICVIDEO_GENRE + 2;
1060   varindex = DatabaseUtils::GetFieldIndex(FieldGenre, MediaTypeMusicVideo);
1061   EXPECT_EQ(refindex, varindex);
1062
1063   refindex = VIDEODB_ID_MUSICVIDEO_TRACK + 2;
1064   varindex = DatabaseUtils::GetFieldIndex(FieldTrackNumber, MediaTypeMusicVideo);
1065   EXPECT_EQ(refindex, varindex);
1066
1067   refindex = VIDEODB_DETAILS_MUSICVIDEO_FILE;
1068   varindex = DatabaseUtils::GetFieldIndex(FieldFilename, MediaTypeMusicVideo);
1069   EXPECT_EQ(refindex, varindex);
1070
1071   refindex = VIDEODB_DETAILS_MUSICVIDEO_PATH;
1072   varindex = DatabaseUtils::GetFieldIndex(FieldPath, MediaTypeMusicVideo);
1073   EXPECT_EQ(refindex, varindex);
1074
1075   refindex = VIDEODB_DETAILS_MUSICVIDEO_PLAYCOUNT;
1076   varindex = DatabaseUtils::GetFieldIndex(FieldPlaycount, MediaTypeMusicVideo);
1077   EXPECT_EQ(refindex, varindex);
1078
1079   refindex = VIDEODB_DETAILS_MUSICVIDEO_LASTPLAYED;
1080   varindex = DatabaseUtils::GetFieldIndex(FieldLastPlayed, MediaTypeMusicVideo);
1081   EXPECT_EQ(refindex, varindex);
1082
1083   refindex = VIDEODB_DETAILS_MUSICVIDEO_DATEADDED;
1084   varindex = DatabaseUtils::GetFieldIndex(FieldDateAdded, MediaTypeMusicVideo);
1085   EXPECT_EQ(refindex, varindex);
1086
1087   refindex = -1;
1088   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeMusicVideo);
1089   EXPECT_EQ(refindex, varindex);
1090 }
1091
1092 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeMovie)
1093 {
1094   int refindex, varindex;
1095
1096   refindex = 0;
1097   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeMovie);
1098   EXPECT_EQ(refindex, varindex);
1099
1100   refindex = VIDEODB_ID_TITLE + 2;
1101   varindex = DatabaseUtils::GetFieldIndex(FieldTitle, MediaTypeMovie);
1102   EXPECT_EQ(refindex, varindex);
1103
1104   refindex = VIDEODB_ID_SORTTITLE + 2;
1105   varindex = DatabaseUtils::GetFieldIndex(FieldSortTitle, MediaTypeMovie);
1106   EXPECT_EQ(refindex, varindex);
1107
1108   refindex = VIDEODB_ID_PLOT + 2;
1109   varindex = DatabaseUtils::GetFieldIndex(FieldPlot, MediaTypeMovie);
1110   EXPECT_EQ(refindex, varindex);
1111
1112   refindex = VIDEODB_ID_PLOTOUTLINE + 2;
1113   varindex = DatabaseUtils::GetFieldIndex(FieldPlotOutline, MediaTypeMovie);
1114   EXPECT_EQ(refindex, varindex);
1115
1116   refindex = VIDEODB_ID_TAGLINE + 2;
1117   varindex = DatabaseUtils::GetFieldIndex(FieldTagline, MediaTypeMovie);
1118   EXPECT_EQ(refindex, varindex);
1119
1120   refindex = VIDEODB_ID_VOTES + 2;
1121   varindex = DatabaseUtils::GetFieldIndex(FieldVotes, MediaTypeMovie);
1122   EXPECT_EQ(refindex, varindex);
1123
1124   refindex = VIDEODB_ID_RATING + 2;
1125   varindex = DatabaseUtils::GetFieldIndex(FieldRating, MediaTypeMovie);
1126   EXPECT_EQ(refindex, varindex);
1127
1128   refindex = VIDEODB_ID_CREDITS + 2;
1129   varindex = DatabaseUtils::GetFieldIndex(FieldWriter, MediaTypeMovie);
1130   EXPECT_EQ(refindex, varindex);
1131
1132   refindex = VIDEODB_ID_YEAR + 2;
1133   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeMovie);
1134   EXPECT_EQ(refindex, varindex);
1135
1136   refindex = VIDEODB_ID_RUNTIME + 2;
1137   varindex = DatabaseUtils::GetFieldIndex(FieldTime, MediaTypeMovie);
1138   EXPECT_EQ(refindex, varindex);
1139
1140   refindex = VIDEODB_ID_MPAA + 2;
1141   varindex = DatabaseUtils::GetFieldIndex(FieldMPAA, MediaTypeMovie);
1142   EXPECT_EQ(refindex, varindex);
1143
1144   refindex = VIDEODB_ID_TOP250 + 2;
1145   varindex = DatabaseUtils::GetFieldIndex(FieldTop250, MediaTypeMovie);
1146   EXPECT_EQ(refindex, varindex);
1147
1148   refindex = VIDEODB_ID_GENRE + 2;
1149   varindex = DatabaseUtils::GetFieldIndex(FieldGenre, MediaTypeMovie);
1150   EXPECT_EQ(refindex, varindex);
1151
1152   refindex = VIDEODB_ID_DIRECTOR + 2;
1153   varindex = DatabaseUtils::GetFieldIndex(FieldDirector, MediaTypeMovie);
1154   EXPECT_EQ(refindex, varindex);
1155
1156   refindex = VIDEODB_ID_STUDIOS + 2;
1157   varindex = DatabaseUtils::GetFieldIndex(FieldStudio, MediaTypeMovie);
1158   EXPECT_EQ(refindex, varindex);
1159
1160   refindex = VIDEODB_ID_TRAILER + 2;
1161   varindex = DatabaseUtils::GetFieldIndex(FieldTrailer, MediaTypeMovie);
1162   EXPECT_EQ(refindex, varindex);
1163
1164   refindex = VIDEODB_ID_COUNTRY + 2;
1165   varindex = DatabaseUtils::GetFieldIndex(FieldCountry, MediaTypeMovie);
1166   EXPECT_EQ(refindex, varindex);
1167
1168   refindex = VIDEODB_DETAILS_MOVIE_FILE + 2;
1169   varindex = DatabaseUtils::GetFieldIndex(FieldFilename, MediaTypeMovie);
1170   EXPECT_EQ(refindex, varindex);
1171
1172   refindex = VIDEODB_DETAILS_MOVIE_PATH;
1173   varindex = DatabaseUtils::GetFieldIndex(FieldPath, MediaTypeMovie);
1174   EXPECT_EQ(refindex, varindex);
1175
1176   refindex = VIDEODB_DETAILS_MOVIE_PLAYCOUNT;
1177   varindex = DatabaseUtils::GetFieldIndex(FieldPlaycount, MediaTypeMovie);
1178   EXPECT_EQ(refindex, varindex);
1179
1180   refindex = VIDEODB_DETAILS_MOVIE_LASTPLAYED;
1181   varindex = DatabaseUtils::GetFieldIndex(FieldLastPlayed, MediaTypeMovie);
1182   EXPECT_EQ(refindex, varindex);
1183
1184   refindex = VIDEODB_DETAILS_MOVIE_DATEADDED;
1185   varindex = DatabaseUtils::GetFieldIndex(FieldDateAdded, MediaTypeMovie);
1186   EXPECT_EQ(refindex, varindex);
1187
1188   refindex = -1;
1189   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeMovie);
1190   EXPECT_EQ(refindex, varindex);
1191 }
1192
1193 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeTvShow)
1194 {
1195   int refindex, varindex;
1196
1197   refindex = 0;
1198   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeTvShow);
1199   EXPECT_EQ(refindex, varindex);
1200
1201   refindex = VIDEODB_ID_TV_TITLE + 1;
1202   varindex = DatabaseUtils::GetFieldIndex(FieldTitle, MediaTypeTvShow);
1203   EXPECT_EQ(refindex, varindex);
1204
1205   refindex = VIDEODB_ID_TV_SORTTITLE + 1;
1206   varindex = DatabaseUtils::GetFieldIndex(FieldSortTitle, MediaTypeTvShow);
1207   EXPECT_EQ(refindex, varindex);
1208
1209   refindex = VIDEODB_ID_TV_PLOT + 1;
1210   varindex = DatabaseUtils::GetFieldIndex(FieldPlot, MediaTypeTvShow);
1211   EXPECT_EQ(refindex, varindex);
1212
1213   refindex = VIDEODB_ID_TV_STATUS + 1;
1214   varindex = DatabaseUtils::GetFieldIndex(FieldTvShowStatus, MediaTypeTvShow);
1215   EXPECT_EQ(refindex, varindex);
1216
1217   refindex = VIDEODB_ID_TV_VOTES + 1;
1218   varindex = DatabaseUtils::GetFieldIndex(FieldVotes, MediaTypeTvShow);
1219   EXPECT_EQ(refindex, varindex);
1220
1221   refindex = VIDEODB_ID_TV_RATING + 1;
1222   varindex = DatabaseUtils::GetFieldIndex(FieldRating, MediaTypeTvShow);
1223   EXPECT_EQ(refindex, varindex);
1224
1225   refindex = VIDEODB_ID_TV_PREMIERED + 1;
1226   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeTvShow);
1227   EXPECT_EQ(refindex, varindex);
1228
1229   refindex = VIDEODB_ID_TV_GENRE + 1;
1230   varindex = DatabaseUtils::GetFieldIndex(FieldGenre, MediaTypeTvShow);
1231   EXPECT_EQ(refindex, varindex);
1232
1233   refindex = VIDEODB_ID_TV_MPAA + 1;
1234   varindex = DatabaseUtils::GetFieldIndex(FieldMPAA, MediaTypeTvShow);
1235   EXPECT_EQ(refindex, varindex);
1236
1237   refindex = VIDEODB_ID_TV_STUDIOS + 1;
1238   varindex = DatabaseUtils::GetFieldIndex(FieldStudio, MediaTypeTvShow);
1239   EXPECT_EQ(refindex, varindex);
1240
1241   refindex = VIDEODB_DETAILS_TVSHOW_PATH;
1242   varindex = DatabaseUtils::GetFieldIndex(FieldPath, MediaTypeTvShow);
1243   EXPECT_EQ(refindex, varindex);
1244
1245   refindex = VIDEODB_DETAILS_TVSHOW_DATEADDED;
1246   varindex = DatabaseUtils::GetFieldIndex(FieldDateAdded, MediaTypeTvShow);
1247   EXPECT_EQ(refindex, varindex);
1248
1249   refindex = VIDEODB_DETAILS_TVSHOW_NUM_EPISODES;
1250   varindex = DatabaseUtils::GetFieldIndex(FieldNumberOfEpisodes, MediaTypeTvShow);
1251   EXPECT_EQ(refindex, varindex);
1252
1253   refindex = VIDEODB_DETAILS_TVSHOW_NUM_WATCHED;
1254   varindex = DatabaseUtils::GetFieldIndex(FieldNumberOfWatchedEpisodes, MediaTypeTvShow);
1255   EXPECT_EQ(refindex, varindex);
1256
1257   refindex = VIDEODB_DETAILS_TVSHOW_NUM_SEASONS;
1258   varindex = DatabaseUtils::GetFieldIndex(FieldSeason, MediaTypeTvShow);
1259   EXPECT_EQ(refindex, varindex);
1260
1261   refindex = -1;
1262   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeTvShow);
1263   EXPECT_EQ(refindex, varindex);
1264 }
1265
1266 TEST(TestDatabaseUtils, GetFieldIndex_MediaTypeEpisode)
1267 {
1268   int refindex, varindex;
1269
1270   refindex = 0;
1271   varindex = DatabaseUtils::GetFieldIndex(FieldId, MediaTypeEpisode);
1272   EXPECT_EQ(refindex, varindex);
1273
1274   refindex = VIDEODB_ID_EPISODE_TITLE + 2;
1275   varindex = DatabaseUtils::GetFieldIndex(FieldTitle, MediaTypeEpisode);
1276   EXPECT_EQ(refindex, varindex);
1277
1278   refindex = VIDEODB_ID_EPISODE_PLOT + 2;
1279   varindex = DatabaseUtils::GetFieldIndex(FieldPlot, MediaTypeEpisode);
1280   EXPECT_EQ(refindex, varindex);
1281
1282   refindex = VIDEODB_ID_EPISODE_VOTES + 2;
1283   varindex = DatabaseUtils::GetFieldIndex(FieldVotes, MediaTypeEpisode);
1284   EXPECT_EQ(refindex, varindex);
1285
1286   refindex = VIDEODB_ID_EPISODE_RATING + 2;
1287   varindex = DatabaseUtils::GetFieldIndex(FieldRating, MediaTypeEpisode);
1288   EXPECT_EQ(refindex, varindex);
1289
1290   refindex = VIDEODB_ID_EPISODE_CREDITS + 2;
1291   varindex = DatabaseUtils::GetFieldIndex(FieldWriter, MediaTypeEpisode);
1292   EXPECT_EQ(refindex, varindex);
1293
1294   refindex = VIDEODB_ID_EPISODE_AIRED + 2;
1295   varindex = DatabaseUtils::GetFieldIndex(FieldAirDate, MediaTypeEpisode);
1296   EXPECT_EQ(refindex, varindex);
1297
1298   refindex = VIDEODB_ID_EPISODE_RUNTIME + 2;
1299   varindex = DatabaseUtils::GetFieldIndex(FieldTime, MediaTypeEpisode);
1300   EXPECT_EQ(refindex, varindex);
1301
1302   refindex = VIDEODB_ID_EPISODE_DIRECTOR + 2;
1303   varindex = DatabaseUtils::GetFieldIndex(FieldDirector, MediaTypeEpisode);
1304   EXPECT_EQ(refindex, varindex);
1305
1306   refindex = VIDEODB_ID_EPISODE_SEASON + 2;
1307   varindex = DatabaseUtils::GetFieldIndex(FieldSeason, MediaTypeEpisode);
1308   EXPECT_EQ(refindex, varindex);
1309
1310   refindex = VIDEODB_ID_EPISODE_EPISODE + 2;
1311   varindex = DatabaseUtils::GetFieldIndex(FieldEpisodeNumber, MediaTypeEpisode);
1312   EXPECT_EQ(refindex, varindex);
1313
1314   refindex = VIDEODB_DETAILS_EPISODE_FILE;
1315   varindex = DatabaseUtils::GetFieldIndex(FieldFilename, MediaTypeEpisode);
1316   EXPECT_EQ(refindex, varindex);
1317
1318   refindex = VIDEODB_DETAILS_EPISODE_PATH;
1319   varindex = DatabaseUtils::GetFieldIndex(FieldPath, MediaTypeEpisode);
1320   EXPECT_EQ(refindex, varindex);
1321
1322   refindex = VIDEODB_DETAILS_EPISODE_PLAYCOUNT;
1323   varindex = DatabaseUtils::GetFieldIndex(FieldPlaycount, MediaTypeEpisode);
1324   EXPECT_EQ(refindex, varindex);
1325
1326   refindex = VIDEODB_DETAILS_EPISODE_LASTPLAYED;
1327   varindex = DatabaseUtils::GetFieldIndex(FieldLastPlayed, MediaTypeEpisode);
1328   EXPECT_EQ(refindex, varindex);
1329
1330   refindex = VIDEODB_DETAILS_EPISODE_DATEADDED;
1331   varindex = DatabaseUtils::GetFieldIndex(FieldDateAdded, MediaTypeEpisode);
1332   EXPECT_EQ(refindex, varindex);
1333
1334   refindex = VIDEODB_DETAILS_EPISODE_TVSHOW_NAME;
1335   varindex = DatabaseUtils::GetFieldIndex(FieldTvShowTitle, MediaTypeEpisode);
1336   EXPECT_EQ(refindex, varindex);
1337
1338   refindex = VIDEODB_DETAILS_EPISODE_TVSHOW_STUDIO;
1339   varindex = DatabaseUtils::GetFieldIndex(FieldStudio, MediaTypeEpisode);
1340   EXPECT_EQ(refindex, varindex);
1341
1342   refindex = VIDEODB_DETAILS_EPISODE_TVSHOW_AIRED;
1343   varindex = DatabaseUtils::GetFieldIndex(FieldYear, MediaTypeEpisode);
1344   EXPECT_EQ(refindex, varindex);
1345
1346   refindex = VIDEODB_DETAILS_EPISODE_TVSHOW_MPAA;
1347   varindex = DatabaseUtils::GetFieldIndex(FieldMPAA, MediaTypeEpisode);
1348   EXPECT_EQ(refindex, varindex);
1349
1350   refindex = -1;
1351   varindex = DatabaseUtils::GetFieldIndex(FieldRandom, MediaTypeEpisode);
1352   EXPECT_EQ(refindex, varindex);
1353 }
1354
1355 TEST(TestDatabaseUtils, GetSelectFields)
1356 {
1357   Fields fields;
1358   FieldList fieldlist;
1359
1360   EXPECT_FALSE(DatabaseUtils::GetSelectFields(fields, MediaTypeAlbum,
1361                                               fieldlist));
1362
1363   fields.insert(FieldId);
1364   fields.insert(FieldGenre);
1365   fields.insert(FieldAlbum);
1366   fields.insert(FieldArtist);
1367   fields.insert(FieldTitle);
1368   EXPECT_FALSE(DatabaseUtils::GetSelectFields(fields, MediaTypeNone,
1369                                               fieldlist));
1370   EXPECT_TRUE(DatabaseUtils::GetSelectFields(fields, MediaTypeAlbum,
1371                                              fieldlist));
1372   EXPECT_FALSE(fieldlist.empty());
1373 }
1374
1375 TEST(TestDatabaseUtils, GetFieldValue)
1376 {
1377   CVariant v_null, v_string;
1378   dbiplus::field_value f_null, f_string("test");
1379
1380   f_null.set_isNull();
1381   EXPECT_TRUE(DatabaseUtils::GetFieldValue(f_null, v_null));
1382   EXPECT_TRUE(v_null.isNull());
1383
1384   EXPECT_TRUE(DatabaseUtils::GetFieldValue(f_string, v_string));
1385   EXPECT_FALSE(v_string.isNull());
1386   EXPECT_TRUE(v_string.isString());
1387 }
1388
1389 /* TODO: Need some way to test this function */
1390 // TEST(TestDatabaseUtils, GetDatabaseResults)
1391 // {
1392 //   static bool GetDatabaseResults(MediaType mediaType, const FieldList &fields,
1393 //                                  const std::auto_ptr<dbiplus::Dataset> &dataset,
1394 //                                  DatabaseResults &results);
1395 // }
1396
1397 TEST(TestDatabaseUtils, BuildLimitClause)
1398 {
1399   std::string a = DatabaseUtils::BuildLimitClause(100);
1400   EXPECT_STREQ(" LIMIT 100", a.c_str());
1401 }
1402
1403 // class DatabaseUtils
1404 // {
1405 // public:
1406 // 
1407 // 
1408 //   static std::string BuildLimitClause(int end, int start = 0);
1409 // };