mirror of
				https://github.com/sqlite/sqlite.git
				synced 2025-11-03 16:53:36 +03:00 
			
		
		
		
	Add the experimental SQLITE_FCNTL_WIN32_GET_HANDLE file control.
FossilOrigin-Name: b6ddabe1818c36007c476a31e2e35755630a5f14
This commit is contained in:
		
							
								
								
									
										24
									
								
								manifest
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								manifest
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
C The\ssession\sextension\sis\sdisabled\sby\sdefault.\s\sTo\senable\sit\susing\n--enable-session\son\s./configure\son\sunix\sand\sadd\sSESSION=1\sto\sthe\snmake\non\sWindows.\s\sOr\sadd\s-DSQLITE_ENABLE_SESSION\sand\n-DSQLITE_ENABLE_PREUPDATE_HOOK\sto\sbuild\smanually.
 | 
					C Add\sthe\sexperimental\sSQLITE_FCNTL_WIN32_GET_HANDLE\sfile\scontrol.
 | 
				
			||||||
D 2016-05-03T14:57:07.139
 | 
					D 2016-05-03T19:36:54.758
 | 
				
			||||||
F Makefile.in 9eda6e1c90d05c199c3ec8a7069b0682ad307657
 | 
					F Makefile.in 9eda6e1c90d05c199c3ec8a7069b0682ad307657
 | 
				
			||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 | 
					F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 | 
				
			||||||
F Makefile.msc a7f34be67d16284e4208370365a9728094861194
 | 
					F Makefile.msc a7f34be67d16284e4208370365a9728094861194
 | 
				
			||||||
@@ -362,7 +362,7 @@ F src/os.h 8e976e59eb4ca1c0fca6d35ee803e38951cb0343
 | 
				
			|||||||
F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
 | 
					F src/os_common.h b2f4707a603e36811d9b1a13278bffd757857b85
 | 
				
			||||||
F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 | 
					F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 | 
				
			||||||
F src/os_unix.c a9443cdab41d7f3cdf0df3a5aab62fd6e1c9b234
 | 
					F src/os_unix.c a9443cdab41d7f3cdf0df3a5aab62fd6e1c9b234
 | 
				
			||||||
F src/os_win.c 852fc2ff6084296348ed3739c548b2cf32df394e
 | 
					F src/os_win.c 75edd38c5efbb177cbfdce7128635a2bb53cf16c
 | 
				
			||||||
F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
 | 
					F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca
 | 
				
			||||||
F src/pager.c a8d30c49c231e9a20d05257613db922532588963
 | 
					F src/pager.c a8d30c49c231e9a20d05257613db922532588963
 | 
				
			||||||
F src/pager.h 329bdf078a4e0a3b35084534d58625d21fd03681
 | 
					F src/pager.h 329bdf078a4e0a3b35084534d58625d21fd03681
 | 
				
			||||||
@@ -379,7 +379,7 @@ F src/resolve.c b8f7174e5f8c33c44ded3a25a973d0bb89228c20
 | 
				
			|||||||
F src/rowset.c 49eb91c588a2bab36647368e031dc5b66928149d
 | 
					F src/rowset.c 49eb91c588a2bab36647368e031dc5b66928149d
 | 
				
			||||||
F src/select.c fd4a7ce2937497181063cfedb92058ac89491a5d
 | 
					F src/select.c fd4a7ce2937497181063cfedb92058ac89491a5d
 | 
				
			||||||
F src/shell.c 14ff7f660530a52b117d110ba3390b7b2eb719b6
 | 
					F src/shell.c 14ff7f660530a52b117d110ba3390b7b2eb719b6
 | 
				
			||||||
F src/sqlite.h.in 9984129d86243424b765fcb3f147c697bd20bb54
 | 
					F src/sqlite.h.in 07a295a39a41cfd136bf63bdcfe478caaee78042
 | 
				
			||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 | 
					F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 | 
				
			||||||
F src/sqlite3ext.h 98f72cbfe00169c39089115427d06ea05fe4b4a2
 | 
					F src/sqlite3ext.h 98f72cbfe00169c39089115427d06ea05fe4b4a2
 | 
				
			||||||
F src/sqliteInt.h f4a53f3547dab80dc7db975fa1192d9bad1f38e8
 | 
					F src/sqliteInt.h f4a53f3547dab80dc7db975fa1192d9bad1f38e8
 | 
				
			||||||
@@ -387,7 +387,7 @@ F src/sqliteLimit.h c0373387c287c8d0932510b5547ecde31b5da247
 | 
				
			|||||||
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
 | 
					F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
 | 
				
			||||||
F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
 | 
					F src/table.c 5226df15ab9179b9ed558d89575ea0ce37b03fc9
 | 
				
			||||||
F src/tclsqlite.c 9c4c4589d078de37813ded708d8838b338ffb060
 | 
					F src/tclsqlite.c 9c4c4589d078de37813ded708d8838b338ffb060
 | 
				
			||||||
F src/test1.c c0e5b69f99e95a2c9f55fdb6e46b44f1a15292d8
 | 
					F src/test1.c 7862c314d742153639ecb6ec2daf29936cc066cd
 | 
				
			||||||
F src/test2.c 5586f43fcd9a1be0830793cf9d354082c261b25b
 | 
					F src/test2.c 5586f43fcd9a1be0830793cf9d354082c261b25b
 | 
				
			||||||
F src/test3.c 0df6f8dbb4cbaa7106397c70a271fa6a43659042
 | 
					F src/test3.c 0df6f8dbb4cbaa7106397c70a271fa6a43659042
 | 
				
			||||||
F src/test4.c d168f83cc78d02e8d35567bb5630e40dcd85ac1e
 | 
					F src/test4.c d168f83cc78d02e8d35567bb5630e40dcd85ac1e
 | 
				
			||||||
@@ -664,7 +664,7 @@ F test/expr.test 79c3e7502d9e571553b85f0ecc8ff2ac7d0e4931
 | 
				
			|||||||
F test/extension01.test 00d13cec817f331a687a243e0e5a2d87b0e358c9
 | 
					F test/extension01.test 00d13cec817f331a687a243e0e5a2d87b0e358c9
 | 
				
			||||||
F test/extraquick.test cb254400bd42bfb777ff675356aabf3287978f79
 | 
					F test/extraquick.test cb254400bd42bfb777ff675356aabf3287978f79
 | 
				
			||||||
F test/fallocate.test 3e979af17dfa7e5e9dda5eba1a696c04fa9d47f7
 | 
					F test/fallocate.test 3e979af17dfa7e5e9dda5eba1a696c04fa9d47f7
 | 
				
			||||||
F test/filectrl.test 7c13f96457435238da99aff7343ad6a3a4885787
 | 
					F test/filectrl.test c6547e6c3c4c3ef9707a0b3dc147de718135cacc
 | 
				
			||||||
F test/filefmt.test e4edbdc637ca9576ccf4337a3cce627d9df7a56c
 | 
					F test/filefmt.test e4edbdc637ca9576ccf4337a3cce627d9df7a56c
 | 
				
			||||||
F test/fkey1.test 13e3d48236a2b9f5c5ebd232eef9b3ab682a8a2c
 | 
					F test/fkey1.test 13e3d48236a2b9f5c5ebd232eef9b3ab682a8a2c
 | 
				
			||||||
F test/fkey2.test f3d27ecba480a348c328965d154214719bb158a9
 | 
					F test/fkey2.test f3d27ecba480a348c328965d154214719bb158a9
 | 
				
			||||||
@@ -1486,8 +1486,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 | 
				
			|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 | 
					F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 | 
				
			||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 | 
					F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 | 
				
			||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
 | 
					F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
 | 
				
			||||||
P 0715ce164333e27671efbec8796f238df98cc287 e462cde2a50c39cc2f8d8624aada19280b8226eb
 | 
					P bcaa650e8796984b275eceba0ed477f360295d01
 | 
				
			||||||
R b2e26094738bdcbd727f209d6b0330cd
 | 
					R 7e9bbb4137cb671c555aabb8a094cd9b
 | 
				
			||||||
T +closed e462cde2a50c39cc2f8d8624aada19280b8226eb
 | 
					T *branch * win32GetHandle
 | 
				
			||||||
U drh
 | 
					T *sym-win32GetHandle *
 | 
				
			||||||
Z be2a8ff6db06dcbc7ab32e285c183e7e
 | 
					T -sym-trunk *
 | 
				
			||||||
 | 
					U mistachkin
 | 
				
			||||||
 | 
					Z e75ba582b3d5fa180704c51e0604373b
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1 @@
 | 
				
			|||||||
bcaa650e8796984b275eceba0ed477f360295d01
 | 
					b6ddabe1818c36007c476a31e2e35755630a5f14
 | 
				
			||||||
@@ -3434,6 +3434,12 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
 | 
				
			|||||||
      OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
 | 
					      OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
 | 
				
			||||||
      return SQLITE_OK;
 | 
					      return SQLITE_OK;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    case SQLITE_FCNTL_WIN32_GET_HANDLE: {
 | 
				
			||||||
 | 
					      LPHANDLE phFile = (LPHANDLE)pArg;
 | 
				
			||||||
 | 
					      *phFile = pFile->h;
 | 
				
			||||||
 | 
					      OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
 | 
				
			||||||
 | 
					      return SQLITE_OK;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
#ifdef SQLITE_TEST
 | 
					#ifdef SQLITE_TEST
 | 
				
			||||||
    case SQLITE_FCNTL_WIN32_SET_HANDLE: {
 | 
					    case SQLITE_FCNTL_WIN32_SET_HANDLE: {
 | 
				
			||||||
      LPHANDLE phFile = (LPHANDLE)pArg;
 | 
					      LPHANDLE phFile = (LPHANDLE)pArg;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -966,6 +966,12 @@ struct sqlite3_io_methods {
 | 
				
			|||||||
** on whether or not the file has been renamed, moved, or deleted since it
 | 
					** on whether or not the file has been renamed, moved, or deleted since it
 | 
				
			||||||
** was first opened.
 | 
					** was first opened.
 | 
				
			||||||
**
 | 
					**
 | 
				
			||||||
 | 
					** <li>[[SQLITE_FCNTL_WIN32_GET_HANDLE]]
 | 
				
			||||||
 | 
					** The [SQLITE_FCNTL_WIN32_GET_HANDLE] opcode can be used to obtain the
 | 
				
			||||||
 | 
					** underlying native file handle associated with a file handle.  This file
 | 
				
			||||||
 | 
					** control interprets its argument as a pointer to a native file handle and
 | 
				
			||||||
 | 
					** writes the resulting value there.
 | 
				
			||||||
 | 
					**
 | 
				
			||||||
** <li>[[SQLITE_FCNTL_WIN32_SET_HANDLE]]
 | 
					** <li>[[SQLITE_FCNTL_WIN32_SET_HANDLE]]
 | 
				
			||||||
** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging.  This
 | 
					** The [SQLITE_FCNTL_WIN32_SET_HANDLE] opcode is used for debugging.  This
 | 
				
			||||||
** opcode causes the xFileControl method to swap the file handle with the one
 | 
					** opcode causes the xFileControl method to swap the file handle with the one
 | 
				
			||||||
@@ -1016,6 +1022,7 @@ struct sqlite3_io_methods {
 | 
				
			|||||||
#define SQLITE_FCNTL_RBU                    26
 | 
					#define SQLITE_FCNTL_RBU                    26
 | 
				
			||||||
#define SQLITE_FCNTL_VFS_POINTER            27
 | 
					#define SQLITE_FCNTL_VFS_POINTER            27
 | 
				
			||||||
#define SQLITE_FCNTL_JOURNAL_POINTER        28
 | 
					#define SQLITE_FCNTL_JOURNAL_POINTER        28
 | 
				
			||||||
 | 
					#define SQLITE_FCNTL_WIN32_GET_HANDLE       29
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* deprecated names */
 | 
					/* deprecated names */
 | 
				
			||||||
#define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
 | 
					#define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								src/test1.c
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								src/test1.c
									
									
									
									
									
								
							@@ -5482,6 +5482,38 @@ static int file_control_win32_av_retry(
 | 
				
			|||||||
  return TCL_OK;  
 | 
					  return TCL_OK;  
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					** tclcmd:   file_control_win32_get_handle DB
 | 
				
			||||||
 | 
					**
 | 
				
			||||||
 | 
					** This TCL command runs the sqlite3_file_control interface with
 | 
				
			||||||
 | 
					** the SQLITE_FCNTL_WIN32_GET_HANDLE opcode.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					static int file_control_win32_get_handle(
 | 
				
			||||||
 | 
					  ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
 | 
				
			||||||
 | 
					  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
 | 
				
			||||||
 | 
					  int objc,              /* Number of arguments */
 | 
				
			||||||
 | 
					  Tcl_Obj *CONST objv[]  /* Command arguments */
 | 
				
			||||||
 | 
					){
 | 
				
			||||||
 | 
					  sqlite3 *db;
 | 
				
			||||||
 | 
					  int rc;
 | 
				
			||||||
 | 
					  HANDLE hFile = NULL;
 | 
				
			||||||
 | 
					  char z[100];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if( objc!=2 ){
 | 
				
			||||||
 | 
					    Tcl_AppendResult(interp, "wrong # args: should be \"",
 | 
				
			||||||
 | 
					        Tcl_GetStringFromObj(objv[0], 0), " DB", 0);
 | 
				
			||||||
 | 
					    return TCL_ERROR;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){
 | 
				
			||||||
 | 
					    return TCL_ERROR;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  rc = sqlite3_file_control(db, NULL, SQLITE_FCNTL_WIN32_GET_HANDLE,
 | 
				
			||||||
 | 
					                            (void*)&hFile);
 | 
				
			||||||
 | 
					  sqlite3_snprintf(sizeof(z), z, "%d %p", rc, (void*)hFile);
 | 
				
			||||||
 | 
					  Tcl_AppendResult(interp, z, (char*)0);
 | 
				
			||||||
 | 
					  return TCL_OK;  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
** tclcmd:   file_control_win32_set_handle DB HANDLE
 | 
					** tclcmd:   file_control_win32_set_handle DB HANDLE
 | 
				
			||||||
**
 | 
					**
 | 
				
			||||||
@@ -7214,6 +7246,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
 | 
				
			|||||||
     { "file_control_sizehint_test",  file_control_sizehint_test,   0   },
 | 
					     { "file_control_sizehint_test",  file_control_sizehint_test,   0   },
 | 
				
			||||||
#if SQLITE_OS_WIN
 | 
					#if SQLITE_OS_WIN
 | 
				
			||||||
     { "file_control_win32_av_retry", file_control_win32_av_retry,  0   },
 | 
					     { "file_control_win32_av_retry", file_control_win32_av_retry,  0   },
 | 
				
			||||||
 | 
					     { "file_control_win32_get_handle", file_control_win32_get_handle, 0  },
 | 
				
			||||||
     { "file_control_win32_set_handle", file_control_win32_set_handle, 0  },
 | 
					     { "file_control_win32_set_handle", file_control_win32_set_handle, 0  },
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
     { "file_control_persist_wal",    file_control_persist_wal,     0   },
 | 
					     { "file_control_persist_wal",    file_control_persist_wal,     0   },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,4 +43,30 @@ do_test filectrl-1.6 {
 | 
				
			|||||||
} {/etilqs_/}
 | 
					} {/etilqs_/}
 | 
				
			||||||
db close
 | 
					db close
 | 
				
			||||||
forcedelete .test_control_lockproxy.db-conch test.proxy
 | 
					forcedelete .test_control_lockproxy.db-conch test.proxy
 | 
				
			||||||
 | 
					forcedelete test.db test2.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if {$tcl_platform(platform)=="windows"} {
 | 
				
			||||||
 | 
					  do_test filectrl-2.1 {
 | 
				
			||||||
 | 
					    sqlite3 db test2.db
 | 
				
			||||||
 | 
					    set size [file size test2.db]
 | 
				
			||||||
 | 
					    set handle [file_control_win32_get_handle db]
 | 
				
			||||||
 | 
					    db close
 | 
				
			||||||
 | 
					    forcedelete test2.db
 | 
				
			||||||
 | 
					    list $size $handle [expr {$handle != 0}]
 | 
				
			||||||
 | 
					  } {/^0 \{0 \d+\} 1$/}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  do_test filectrl-2.2 {
 | 
				
			||||||
 | 
					    sqlite3 db test2.db
 | 
				
			||||||
 | 
					    execsql {
 | 
				
			||||||
 | 
					      CREATE TABLE t1(x);
 | 
				
			||||||
 | 
					      INSERT INTO t1 (x) VALUES(RANDOMBLOB(1048576));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    set size [file size test2.db]
 | 
				
			||||||
 | 
					    set handle [file_control_win32_get_handle db]
 | 
				
			||||||
 | 
					    db close
 | 
				
			||||||
 | 
					    forcedelete test2.db
 | 
				
			||||||
 | 
					    list $size $handle [expr {$handle != 0}]
 | 
				
			||||||
 | 
					  } {/^1\d+ \{0 \d+\} 1$/}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
finish_test
 | 
					finish_test
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user