aboutsummaryrefslogtreecommitdiff
path: root/src/func.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2013-12-24 12:09:42 +0000
committerdrh <drh@noemail.net>2013-12-24 12:09:42 +0000
commitd9e3c267b469a4cefa99fc2ec2273eed9810c86e (patch)
treee00f35398deedb65ae1add14b0dcb8033f6d860d /src/func.c
parentc8d985e09c2adc83a944889bd6e60e4e86864e3e (diff)
parent3312348cf8d88eb170825aa7b52254ea6219ff4b (diff)
downloadsqlite-d9e3c267b469a4cefa99fc2ec2273eed9810c86e.tar.gz
sqlite-d9e3c267b469a4cefa99fc2ec2273eed9810c86e.zip
Merge the latest trunk changes into the sessions branch.
FossilOrigin-Name: cfd110bf5db2c1993a5e2ca718648bd9c17ee22c
Diffstat (limited to 'src/func.c')
-rw-r--r--src/func.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/func.c b/src/func.c
index 951af97b3..1d6ec9f6e 100644
--- a/src/func.c
+++ b/src/func.c
@@ -219,6 +219,32 @@ static void instrFunc(
}
/*
+** Implementation of the printf() function.
+*/
+static void printfFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ PrintfArguments x;
+ StrAccum str;
+ const char *zFormat;
+ int n;
+
+ if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){
+ x.nArg = argc-1;
+ x.nUsed = 0;
+ x.apArg = argv+1;
+ sqlite3StrAccumInit(&str, 0, 0, SQLITE_MAX_LENGTH);
+ str.db = sqlite3_context_db_handle(context);
+ sqlite3XPrintf(&str, SQLITE_PRINTF_SQLFUNC, zFormat, &x);
+ n = str.nChar;
+ sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n,
+ SQLITE_DYNAMIC);
+ }
+}
+
+/*
** Implementation of the substr() function.
**
** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
@@ -1648,6 +1674,7 @@ void sqlite3RegisterGlobalFunctions(void){
FUNCTION(instr, 2, 0, 0, instrFunc ),
FUNCTION(substr, 2, 0, 0, substrFunc ),
FUNCTION(substr, 3, 0, 0, substrFunc ),
+ FUNCTION(printf, -1, 0, 0, printfFunc ),
FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
FUNCTION(char, -1, 0, 0, charFunc ),
FUNCTION(abs, 1, 0, 0, absFunc ),