aboutsummaryrefslogtreecommitdiff
path: root/ext/misc/fileio.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2018-01-10 15:53:06 +0000
committerdrh <drh@noemail.net>2018-01-10 15:53:06 +0000
commit6c237b1fa79ae303a76a93878dff71cd2897f163 (patch)
tree4e1582811b3267ecd142577b9df40b11108195c2 /ext/misc/fileio.c
parenta5676c4d2df3bae5d2da4706e44e6e0ee5955bf0 (diff)
downloadsqlite-6c237b1fa79ae303a76a93878dff71cd2897f163.tar.gz
sqlite-6c237b1fa79ae303a76a93878dff71cd2897f163.zip
Add the "filetype()" SQL function for interpreting file modes to the
fileio.c extension. FossilOrigin-Name: 58c0c74c407d93f48930a4964b6cc48f008b522d193a62a559de0e6a319a8bd0
Diffstat (limited to 'ext/misc/fileio.c')
-rw-r--r--ext/misc/fileio.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/ext/misc/fileio.c b/ext/misc/fileio.c
index 8170e8637..8f6de7a80 100644
--- a/ext/misc/fileio.c
+++ b/ext/misc/fileio.c
@@ -357,6 +357,30 @@ static void writefileFunc(
}
}
+/*
+** SQL function: filetype(MODE)
+**
+** Based on the integer mode, return one of "file", "directory", or "symlink".
+*/
+static void fileTypeFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ const char *zMode;
+ int iMode = sqlite3_value_int(argv[0]);
+ if( S_ISLNK(iMode) ){
+ zMode = "symlink";
+ }else if( S_ISREG(iMode) ){
+ zMode = "file";
+ }else if( S_ISDIR(iMode) ){
+ zMode = "directory";
+ }else{
+ zMode = "unknown";
+ }
+ sqlite3_result_text(context, zMode, -1, SQLITE_STATIC);
+}
+
#ifndef SQLITE_OMIT_VIRTUALTABLE
/*
@@ -769,6 +793,10 @@ int sqlite3_fileio_init(
writefileFunc, 0, 0);
}
if( rc==SQLITE_OK ){
+ rc = sqlite3_create_function(db, "fileType", 1, SQLITE_UTF8, 0,
+ fileTypeFunc, 0, 0);
+ }
+ if( rc==SQLITE_OK ){
rc = fsdirRegister(db);
}
return rc;