Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: third_party/sqlite/src/src/date.c

Issue 1610963002: Import SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/sqlite/src/src/ctime.c ('k') | third_party/sqlite/src/src/dbstat.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ** 2003 October 31 2 ** 2003 October 31
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
11 ************************************************************************* 11 *************************************************************************
12 ** This file contains the C functions that implement date and time 12 ** This file contains the C functions that implement date and time
13 ** functions for SQLite. 13 ** functions for SQLite.
14 ** 14 **
15 ** There is only one exported symbol in this file - the function 15 ** There is only one exported symbol in this file - the function
16 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file. 16 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
17 ** All other code has file scope. 17 ** All other code has file scope.
18 ** 18 **
19 ** SQLite processes all times and dates as Julian Day numbers. The 19 ** SQLite processes all times and dates as julian day numbers. The
20 ** dates and times are stored as the number of days since noon 20 ** dates and times are stored as the number of days since noon
21 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian 21 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
22 ** calendar system. 22 ** calendar system.
23 ** 23 **
24 ** 1970-01-01 00:00:00 is JD 2440587.5 24 ** 1970-01-01 00:00:00 is JD 2440587.5
25 ** 2000-01-01 00:00:00 is JD 2451544.5 25 ** 2000-01-01 00:00:00 is JD 2451544.5
26 ** 26 **
27 ** This implementation requires years to be expressed as a 4-digit number 27 ** This implementation requires years to be expressed as a 4-digit number
28 ** which means that only dates between 0000-01-01 and 9999-12-31 can 28 ** which means that only dates between 0000-01-01 and 9999-12-31 can
29 ** be represented, even though julian day numbers allow a much wider 29 ** be represented, even though julian day numbers allow a much wider
30 ** range of dates. 30 ** range of dates.
31 ** 31 **
32 ** The Gregorian calendar system is used for all dates and times, 32 ** The Gregorian calendar system is used for all dates and times,
33 ** even those that predate the Gregorian calendar. Historians usually 33 ** even those that predate the Gregorian calendar. Historians usually
34 ** use the Julian calendar for dates prior to 1582-10-15 and for some 34 ** use the julian calendar for dates prior to 1582-10-15 and for some
35 ** dates afterwards, depending on locale. Beware of this difference. 35 ** dates afterwards, depending on locale. Beware of this difference.
36 ** 36 **
37 ** The conversion algorithms are implemented based on descriptions 37 ** The conversion algorithms are implemented based on descriptions
38 ** in the following text: 38 ** in the following text:
39 ** 39 **
40 ** Jean Meeus 40 ** Jean Meeus
41 ** Astronomical Algorithms, 2nd Edition, 1998 41 ** Astronomical Algorithms, 2nd Edition, 1998
42 ** ISBM 0-943396-61-1 42 ** ISBM 0-943396-61-1
43 ** Willmann-Bell, Inc 43 ** Willmann-Bell, Inc
44 ** Richmond, Virginia (USA) 44 ** Richmond, Virginia (USA)
(...skipping 13 matching lines...) Expand all
58 struct DateTime { 58 struct DateTime {
59 sqlite3_int64 iJD; /* The julian day number times 86400000 */ 59 sqlite3_int64 iJD; /* The julian day number times 86400000 */
60 int Y, M, D; /* Year, month, and day */ 60 int Y, M, D; /* Year, month, and day */
61 int h, m; /* Hour and minutes */ 61 int h, m; /* Hour and minutes */
62 int tz; /* Timezone offset in minutes */ 62 int tz; /* Timezone offset in minutes */
63 double s; /* Seconds */ 63 double s; /* Seconds */
64 char validYMD; /* True (1) if Y,M,D are valid */ 64 char validYMD; /* True (1) if Y,M,D are valid */
65 char validHMS; /* True (1) if h,m,s are valid */ 65 char validHMS; /* True (1) if h,m,s are valid */
66 char validJD; /* True (1) if iJD is valid */ 66 char validJD; /* True (1) if iJD is valid */
67 char validTZ; /* True (1) if tz is valid */ 67 char validTZ; /* True (1) if tz is valid */
68 char tzSet; /* Timezone was set explicitly */
68 }; 69 };
69 70
70 71
71 /* 72 /*
72 ** Convert zDate into one or more integers. Additional arguments 73 ** Convert zDate into one or more integers. Additional arguments
73 ** come in groups of 5 as follows: 74 ** come in groups of 5 as follows:
74 ** 75 **
75 ** N number of digits in the integer 76 ** N number of digits in the integer
76 ** min minimum allowed value of the integer 77 ** min minimum allowed value of the integer
77 ** max maximum allowed value of the integer 78 ** max maximum allowed value of the integer
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 return c!=0; 152 return c!=0;
152 } 153 }
153 zDate++; 154 zDate++;
154 if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){ 155 if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
155 return 1; 156 return 1;
156 } 157 }
157 zDate += 5; 158 zDate += 5;
158 p->tz = sgn*(nMn + nHr*60); 159 p->tz = sgn*(nMn + nHr*60);
159 zulu_time: 160 zulu_time:
160 while( sqlite3Isspace(*zDate) ){ zDate++; } 161 while( sqlite3Isspace(*zDate) ){ zDate++; }
162 p->tzSet = 1;
161 return *zDate!=0; 163 return *zDate!=0;
162 } 164 }
163 165
164 /* 166 /*
165 ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF. 167 ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
166 ** The HH, MM, and SS must each be exactly 2 digits. The 168 ** The HH, MM, and SS must each be exactly 2 digits. The
167 ** fractional seconds FFFF can be one or more digits. 169 ** fractional seconds FFFF can be one or more digits.
168 ** 170 **
169 ** Return 1 if there is a parsing error and 0 on success. 171 ** Return 1 if there is a parsing error and 0 on success.
170 */ 172 */
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 p->iJD = sqlite3StmtCurrentTime(context); 299 p->iJD = sqlite3StmtCurrentTime(context);
298 if( p->iJD>0 ){ 300 if( p->iJD>0 ){
299 p->validJD = 1; 301 p->validJD = 1;
300 return 0; 302 return 0;
301 }else{ 303 }else{
302 return 1; 304 return 1;
303 } 305 }
304 } 306 }
305 307
306 /* 308 /*
307 ** Attempt to parse the given string into a Julian Day Number. Return 309 ** Attempt to parse the given string into a julian day number. Return
308 ** the number of errors. 310 ** the number of errors.
309 ** 311 **
310 ** The following are acceptable forms for the input string: 312 ** The following are acceptable forms for the input string:
311 ** 313 **
312 ** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM 314 ** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
313 ** DDDD.DD 315 ** DDDD.DD
314 ** now 316 ** now
315 ** 317 **
316 ** In the first form, the +/-HH:MM is always optional. The fractional 318 ** In the first form, the +/-HH:MM is always optional. The fractional
317 ** seconds extension (the ".FFF") is optional. The seconds portion 319 ** seconds extension (the ".FFF") is optional. The seconds portion
(...skipping 30 matching lines...) Expand all
348 if( !p->validJD ){ 350 if( !p->validJD ){
349 p->Y = 2000; 351 p->Y = 2000;
350 p->M = 1; 352 p->M = 1;
351 p->D = 1; 353 p->D = 1;
352 }else{ 354 }else{
353 Z = (int)((p->iJD + 43200000)/86400000); 355 Z = (int)((p->iJD + 43200000)/86400000);
354 A = (int)((Z - 1867216.25)/36524.25); 356 A = (int)((Z - 1867216.25)/36524.25);
355 A = Z + 1 + A - (A/4); 357 A = Z + 1 + A - (A/4);
356 B = A + 1524; 358 B = A + 1524;
357 C = (int)((B - 122.1)/365.25); 359 C = (int)((B - 122.1)/365.25);
358 D = (36525*C)/100; 360 D = (36525*(C&32767))/100;
359 E = (int)((B-D)/30.6001); 361 E = (int)((B-D)/30.6001);
360 X1 = (int)(30.6001*E); 362 X1 = (int)(30.6001*E);
361 p->D = B - D - X1; 363 p->D = B - D - X1;
362 p->M = E<14 ? E-1 : E-13; 364 p->M = E<14 ? E-1 : E-13;
363 p->Y = p->M>2 ? C - 4716 : C - 4715; 365 p->Y = p->M>2 ? C - 4716 : C - 4715;
364 } 366 }
365 p->validYMD = 1; 367 p->validYMD = 1;
366 } 368 }
367 369
368 /* 370 /*
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 ** as part of the "Secure CRT". It is essentially equivalent to 407 ** as part of the "Secure CRT". It is essentially equivalent to
406 ** localtime_r() available under most POSIX platforms, except that the 408 ** localtime_r() available under most POSIX platforms, except that the
407 ** order of the parameters is reversed. 409 ** order of the parameters is reversed.
408 ** 410 **
409 ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx. 411 ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
410 ** 412 **
411 ** If the user has not indicated to use localtime_r() or localtime_s() 413 ** If the user has not indicated to use localtime_r() or localtime_s()
412 ** already, check for an MSVC build environment that provides 414 ** already, check for an MSVC build environment that provides
413 ** localtime_s(). 415 ** localtime_s().
414 */ 416 */
415 #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \ 417 #if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S \
416 defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE) 418 && defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
419 #undef HAVE_LOCALTIME_S
417 #define HAVE_LOCALTIME_S 1 420 #define HAVE_LOCALTIME_S 1
418 #endif 421 #endif
419 422
420 #ifndef SQLITE_OMIT_LOCALTIME 423 #ifndef SQLITE_OMIT_LOCALTIME
421 /* 424 /*
422 ** The following routine implements the rough equivalent of localtime_r() 425 ** The following routine implements the rough equivalent of localtime_r()
423 ** using whatever operating-system specific localtime facility that 426 ** using whatever operating-system specific localtime facility that
424 ** is available. This routine returns 0 on success and 427 ** is available. This routine returns 0 on success and
425 ** non-zero on any kind of error. 428 ** non-zero on any kind of error.
426 ** 429 **
427 ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this 430 ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this
428 ** routine will always fail. 431 ** routine will always fail.
429 ** 432 **
430 ** EVIDENCE-OF: R-62172-00036 In this implementation, the standard C 433 ** EVIDENCE-OF: R-62172-00036 In this implementation, the standard C
431 ** library function localtime_r() is used to assist in the calculation of 434 ** library function localtime_r() is used to assist in the calculation of
432 ** local time. 435 ** local time.
433 */ 436 */
434 static int osLocaltime(time_t *t, struct tm *pTm){ 437 static int osLocaltime(time_t *t, struct tm *pTm){
435 int rc; 438 int rc;
436 #if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \ 439 #if !HAVE_LOCALTIME_R && !HAVE_LOCALTIME_S
437 && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S)
438 struct tm *pX; 440 struct tm *pX;
439 #if SQLITE_THREADSAFE>0 441 #if SQLITE_THREADSAFE>0
440 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); 442 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
441 #endif 443 #endif
442 sqlite3_mutex_enter(mutex); 444 sqlite3_mutex_enter(mutex);
443 pX = localtime(t); 445 pX = localtime(t);
444 #ifndef SQLITE_OMIT_BUILTIN_TEST 446 #ifndef SQLITE_OMIT_BUILTIN_TEST
445 if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0; 447 if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0;
446 #endif 448 #endif
447 if( pX ) *pTm = *pX; 449 if( pX ) *pTm = *pX;
448 sqlite3_mutex_leave(mutex); 450 sqlite3_mutex_leave(mutex);
449 rc = pX==0; 451 rc = pX==0;
450 #else 452 #else
451 #ifndef SQLITE_OMIT_BUILTIN_TEST 453 #ifndef SQLITE_OMIT_BUILTIN_TEST
452 if( sqlite3GlobalConfig.bLocaltimeFault ) return 1; 454 if( sqlite3GlobalConfig.bLocaltimeFault ) return 1;
453 #endif 455 #endif
454 #if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R 456 #if HAVE_LOCALTIME_R
455 rc = localtime_r(t, pTm)==0; 457 rc = localtime_r(t, pTm)==0;
456 #else 458 #else
457 rc = localtime_s(pTm, t); 459 rc = localtime_s(pTm, t);
458 #endif /* HAVE_LOCALTIME_R */ 460 #endif /* HAVE_LOCALTIME_R */
459 #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */ 461 #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */
460 return rc; 462 return rc;
461 } 463 }
462 #endif /* SQLITE_OMIT_LOCALTIME */ 464 #endif /* SQLITE_OMIT_LOCALTIME */
463 465
464 466
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 ** Treat the current value of p->iJD as the number of 585 ** Treat the current value of p->iJD as the number of
584 ** seconds since 1970. Convert to a real julian day number. 586 ** seconds since 1970. Convert to a real julian day number.
585 */ 587 */
586 if( strcmp(z, "unixepoch")==0 && p->validJD ){ 588 if( strcmp(z, "unixepoch")==0 && p->validJD ){
587 p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000; 589 p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000;
588 clearYMD_HMS_TZ(p); 590 clearYMD_HMS_TZ(p);
589 rc = 0; 591 rc = 0;
590 } 592 }
591 #ifndef SQLITE_OMIT_LOCALTIME 593 #ifndef SQLITE_OMIT_LOCALTIME
592 else if( strcmp(z, "utc")==0 ){ 594 else if( strcmp(z, "utc")==0 ){
593 sqlite3_int64 c1; 595 if( p->tzSet==0 ){
594 computeJD(p); 596 sqlite3_int64 c1;
595 c1 = localtimeOffset(p, pCtx, &rc); 597 computeJD(p);
596 if( rc==SQLITE_OK ){ 598 c1 = localtimeOffset(p, pCtx, &rc);
597 p->iJD -= c1; 599 if( rc==SQLITE_OK ){
598 clearYMD_HMS_TZ(p); 600 p->iJD -= c1;
599 p->iJD += c1 - localtimeOffset(p, pCtx, &rc); 601 clearYMD_HMS_TZ(p);
602 p->iJD += c1 - localtimeOffset(p, pCtx, &rc);
603 }
604 p->tzSet = 1;
605 }else{
606 rc = SQLITE_OK;
600 } 607 }
601 } 608 }
602 #endif 609 #endif
603 break; 610 break;
604 } 611 }
605 case 'w': { 612 case 'w': {
606 /* 613 /*
607 ** weekday N 614 ** weekday N
608 ** 615 **
609 ** Move the date to the same time on the next occurrence of 616 ** Move the date to the same time on the next occurrence of
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 875
869 /* 876 /*
870 ** strftime( FORMAT, TIMESTRING, MOD, MOD, ...) 877 ** strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
871 ** 878 **
872 ** Return a string described by FORMAT. Conversions as follows: 879 ** Return a string described by FORMAT. Conversions as follows:
873 ** 880 **
874 ** %d day of month 881 ** %d day of month
875 ** %f ** fractional seconds SS.SSS 882 ** %f ** fractional seconds SS.SSS
876 ** %H hour 00-24 883 ** %H hour 00-24
877 ** %j day of year 000-366 884 ** %j day of year 000-366
878 ** %J ** Julian day number 885 ** %J ** julian day number
879 ** %m month 01-12 886 ** %m month 01-12
880 ** %M minute 00-59 887 ** %M minute 00-59
881 ** %s seconds since 1970-01-01 888 ** %s seconds since 1970-01-01
882 ** %S seconds 00-59 889 ** %S seconds 00-59
883 ** %w day of week 0-6 sunday==0 890 ** %w day of week 0-6 sunday==0
884 ** %W week of year 00-53 891 ** %W week of year 00-53
885 ** %Y year 0000-9999 892 ** %Y year 0000-9999
886 ** %% % 893 ** %% %
887 */ 894 */
888 static void strftimeFunc( 895 static void strftimeFunc(
889 sqlite3_context *context, 896 sqlite3_context *context,
890 int argc, 897 int argc,
891 sqlite3_value **argv 898 sqlite3_value **argv
892 ){ 899 ){
893 DateTime x; 900 DateTime x;
894 u64 n; 901 u64 n;
895 size_t i,j; 902 size_t i,j;
896 char *z; 903 char *z;
897 sqlite3 *db; 904 sqlite3 *db;
898 const char *zFmt = (const char*)sqlite3_value_text(argv[0]); 905 const char *zFmt;
899 char zBuf[100]; 906 char zBuf[100];
907 if( argc==0 ) return;
908 zFmt = (const char*)sqlite3_value_text(argv[0]);
900 if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return; 909 if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;
901 db = sqlite3_context_db_handle(context); 910 db = sqlite3_context_db_handle(context);
902 for(i=0, n=1; zFmt[i]; i++, n++){ 911 for(i=0, n=1; zFmt[i]; i++, n++){
903 if( zFmt[i]=='%' ){ 912 if( zFmt[i]=='%' ){
904 switch( zFmt[i+1] ){ 913 switch( zFmt[i+1] ){
905 case 'd': 914 case 'd':
906 case 'H': 915 case 'H':
907 case 'm': 916 case 'm':
908 case 'M': 917 case 'M':
909 case 'S': 918 case 'S':
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 struct tm *pTm; 1092 struct tm *pTm;
1084 struct tm sNow; 1093 struct tm sNow;
1085 char zBuf[20]; 1094 char zBuf[20];
1086 1095
1087 UNUSED_PARAMETER(argc); 1096 UNUSED_PARAMETER(argc);
1088 UNUSED_PARAMETER(argv); 1097 UNUSED_PARAMETER(argv);
1089 1098
1090 iT = sqlite3StmtCurrentTime(context); 1099 iT = sqlite3StmtCurrentTime(context);
1091 if( iT<=0 ) return; 1100 if( iT<=0 ) return;
1092 t = iT/1000 - 10000*(sqlite3_int64)21086676; 1101 t = iT/1000 - 10000*(sqlite3_int64)21086676;
1093 #ifdef HAVE_GMTIME_R 1102 #if HAVE_GMTIME_R
1094 pTm = gmtime_r(&t, &sNow); 1103 pTm = gmtime_r(&t, &sNow);
1095 #else 1104 #else
1096 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); 1105 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
1097 pTm = gmtime(&t); 1106 pTm = gmtime(&t);
1098 if( pTm ) memcpy(&sNow, pTm, sizeof(sNow)); 1107 if( pTm ) memcpy(&sNow, pTm, sizeof(sNow));
1099 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)); 1108 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
1100 #endif 1109 #endif
1101 if( pTm ){ 1110 if( pTm ){
1102 strftime(zBuf, 20, zFormat, &sNow); 1111 strftime(zBuf, 20, zFormat, &sNow);
1103 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); 1112 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
1104 } 1113 }
1105 } 1114 }
1106 #endif 1115 #endif
1107 1116
1108 /* 1117 /*
1109 ** This function registered all of the above C functions as SQL 1118 ** This function registered all of the above C functions as SQL
1110 ** functions. This should be the only routine in this file with 1119 ** functions. This should be the only routine in this file with
1111 ** external linkage. 1120 ** external linkage.
1112 */ 1121 */
1113 void sqlite3RegisterDateTimeFunctions(void){ 1122 void sqlite3RegisterDateTimeFunctions(void){
1114 static SQLITE_WSD FuncDef aDateTimeFuncs[] = { 1123 static SQLITE_WSD FuncDef aDateTimeFuncs[] = {
1115 #ifndef SQLITE_OMIT_DATETIME_FUNCS 1124 #ifndef SQLITE_OMIT_DATETIME_FUNCS
1116 FUNCTION(julianday, -1, 0, 0, juliandayFunc ), 1125 DFUNCTION(julianday, -1, 0, 0, juliandayFunc ),
1117 FUNCTION(date, -1, 0, 0, dateFunc ), 1126 DFUNCTION(date, -1, 0, 0, dateFunc ),
1118 FUNCTION(time, -1, 0, 0, timeFunc ), 1127 DFUNCTION(time, -1, 0, 0, timeFunc ),
1119 FUNCTION(datetime, -1, 0, 0, datetimeFunc ), 1128 DFUNCTION(datetime, -1, 0, 0, datetimeFunc ),
1120 FUNCTION(strftime, -1, 0, 0, strftimeFunc ), 1129 DFUNCTION(strftime, -1, 0, 0, strftimeFunc ),
1121 FUNCTION(current_time, 0, 0, 0, ctimeFunc ), 1130 DFUNCTION(current_time, 0, 0, 0, ctimeFunc ),
1122 FUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc), 1131 DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
1123 FUNCTION(current_date, 0, 0, 0, cdateFunc ), 1132 DFUNCTION(current_date, 0, 0, 0, cdateFunc ),
1124 #else 1133 #else
1125 STR_FUNCTION(current_time, 0, "%H:%M:%S", 0, currentTimeFunc), 1134 STR_FUNCTION(current_time, 0, "%H:%M:%S", 0, currentTimeFunc),
1126 STR_FUNCTION(current_date, 0, "%Y-%m-%d", 0, currentTimeFunc), 1135 STR_FUNCTION(current_date, 0, "%Y-%m-%d", 0, currentTimeFunc),
1127 STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc), 1136 STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc),
1128 #endif 1137 #endif
1129 }; 1138 };
1130 int i; 1139 int i;
1131 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions); 1140 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
1132 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs); 1141 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs);
1133 1142
1134 for(i=0; i<ArraySize(aDateTimeFuncs); i++){ 1143 for(i=0; i<ArraySize(aDateTimeFuncs); i++){
1135 sqlite3FuncDefInsert(pHash, &aFunc[i]); 1144 sqlite3FuncDefInsert(pHash, &aFunc[i]);
1136 } 1145 }
1137 } 1146 }
OLDNEW
« no previous file with comments | « third_party/sqlite/src/src/ctime.c ('k') | third_party/sqlite/src/src/dbstat.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698