| 5098 | |
| 5099 | #endif |
| 5100 | int sqlite3_decimal_init( |
| 5101 | sqlite3 *db, |
| 5102 | char **pzErrMsg, |
| 5103 | const sqlite3_api_routines *pApi |
| 5104 | ){ |
| 5105 | int rc = SQLITE_OK; |
| 5106 | static const struct { |
| 5107 | const char *zFuncName; |
| 5108 | int nArg; |
| 5109 | void (*xFunc)(sqlite3_context*,int,sqlite3_value**); |
| 5110 | } aFunc[] = { |
| 5111 | { "decimal", 1, decimalFunc }, |
| 5112 | { "decimal_cmp", 2, decimalCmpFunc }, |
| 5113 | { "decimal_add", 2, decimalAddFunc }, |
| 5114 | { "decimal_sub", 2, decimalSubFunc }, |
| 5115 | { "decimal_mul", 2, decimalMulFunc }, |
| 5116 | }; |
| 5117 | unsigned int i; |
| 5118 | (void)pzErrMsg; /* Unused parameter */ |
| 5119 | |
| 5120 | SQLITE_EXTENSION_INIT2(pApi); |
| 5121 | |
| 5122 | for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){ |
| 5123 | rc = sqlite3_create_function(db, aFunc[i].zFuncName, aFunc[i].nArg, |
| 5124 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, |
| 5125 | 0, aFunc[i].xFunc, 0, 0); |
| 5126 | } |
| 5127 | if( rc==SQLITE_OK ){ |
| 5128 | rc = sqlite3_create_window_function(db, "decimal_sum", 1, |
| 5129 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 0, |
| 5130 | decimalSumStep, decimalSumFinalize, |
| 5131 | decimalSumValue, decimalSumInverse, 0); |
| 5132 | } |
| 5133 | if( rc==SQLITE_OK ){ |
| 5134 | rc = sqlite3_create_collation(db, "decimal", SQLITE_UTF8, |
| 5135 | 0, decimalCollFunc); |
| 5136 | } |
| 5137 | return rc; |
| 5138 | } |
| 5139 | |
| 5140 | /************************* End ../ext/misc/decimal.c ********************/ |
| 5141 | /************************* Begin ../ext/misc/ieee754.c ******************/ |