]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the "filetype()" SQL function for interpreting file modes to the
authordrh <drh@noemail.net>
Wed, 10 Jan 2018 15:53:06 +0000 (15:53 +0000)
committerdrh <drh@noemail.net>
Wed, 10 Jan 2018 15:53:06 +0000 (15:53 +0000)
fileio.c extension.

FossilOrigin-Name: 58c0c74c407d93f48930a4964b6cc48f008b522d193a62a559de0e6a319a8bd0

ext/misc/fileio.c
manifest
manifest.uuid

index 8170e863792673acd2f1d2300dcc11362828ca23..8f6de7a80fd079860bebf0537e82015b63fed9fd 100644 (file)
@@ -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
 
 /* 
@@ -768,6 +792,10 @@ int sqlite3_fileio_init(
     rc = sqlite3_create_function(db, "writefile", -1, SQLITE_UTF8, 0,
                                  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);
   }
index da3f0596642c824d119d30b7f66964f30c6faed7..2de51ed59b7a80049250dcd8865a5190eaf17a14 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\s".ar"\scommand\sdeduces\swhether\sor\snot\sthe\starget\sfile\sis\na\sZIP\sor\sSQLAR\sand\sdoes\sthe\sappropropriate\sthing.\s\sThe\s"-z"\soption\sis\somitted.\nThe\s"--append"\soption\sis\sadded\sto\sopen\sauxiliary\sdatabases\susing\sapndvfs.
-D 2018-01-10T15:17:34.832
+C Add\sthe\s"filetype()"\sSQL\sfunction\sfor\sinterpreting\sfile\smodes\sto\sthe\nfileio.c\sextension.
+D 2018-01-10T15:53:06.284
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 12b6daa4bdb03fa87da27cbc205ff88ace645475b5be79414a3038b68ade14cb
@@ -277,7 +277,7 @@ F ext/misc/compress.c dd4f8a6d0baccff3c694757db5b430f3bbd821d8686d1fc24df55cf9f0
 F ext/misc/csv.c 1a009b93650732e22334edc92459c4630b9fa703397cbb3c8ca279921a36ca11
 F ext/misc/dbdump.c 3509fa6b8932d04e932d6b6b827b6a82ca362781b8e8f3c77336f416793e215e
 F ext/misc/eval.c f971962e92ebb8b0a4e6b62949463ee454d88fa2
-F ext/misc/fileio.c 5176893c15421e9c459f25478e3c1b066d19317b676ff0b142862de4e701af82
+F ext/misc/fileio.c 19d4e5590a3505dc12e652a64730a935a865bb70eb2bb8bfe75767355a09a6e2
 F ext/misc/fuzzer.c 7c64b8197bb77b7d64eff7cac7848870235d4c25
 F ext/misc/ieee754.c f190d0cc5182529acb15babd177781be1ac1718c
 F ext/misc/json1.c dbe086615b9546c156bf32b9378fc09383b58bd17513b866cfd24c1e15281984
@@ -1697,7 +1697,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 9340a2c145bcb4b38d19276a16264a37341c617f0554d66e1da653f1d9f85163
-R 9764fa4832552c458077bab9b9143a51
+P 430d1a7daa823ae53606b7a158af4e7c16f62ff9b072b90606524e7c3f6131df
+R 54a0e19016ae7cc0ce7d6a9a20dca28f
 U drh
-Z fa68d24d45da969d4d63bf64e8c4f030
+Z d67640218b4e3095d4e0ccc9365f61ee
index 8a5e2767d261acabfe18e4c00222e1befb9008f9..91f7e865d705bf8ec05972f7f58c0dbde04d46f6 100644 (file)
@@ -1 +1 @@
-430d1a7daa823ae53606b7a158af4e7c16f62ff9b072b90606524e7c3f6131df
\ No newline at end of file
+58c0c74c407d93f48930a4964b6cc48f008b522d193a62a559de0e6a319a8bd0
\ No newline at end of file