Commit 89c8b298 authored by unknown's avatar unknown

Bug#17368 General log and slow query log don't work

 - Port ha_tina.cc to run on windows 


include/my_sys.h:
  Add define for MAP_PRIVATE, to be used in my_mmap to decide what kind of map to open.
mysys/my_mmap.c:
  Remove unused flProtect
  Look at "prot" argument when deciding if map should be read or write.
storage/csv/ha_tina.cc:
  Remove "include <sys/mman.h>", use the defines and functions from mysys
  Add cast to byte* when calling 'my_write'
  Add cast to char* when calling 'buffer.set'
  munmap the file before setting it's size, my_chsize will fail if file is mapped.
storage/csv/ha_tina.h:
  Remove "typedef" since no name is defined and "tina_set" is used in the code
parent f9dd31ca
...@@ -850,6 +850,7 @@ my_bool my_gethwaddr(uchar *to); ...@@ -850,6 +850,7 @@ my_bool my_gethwaddr(uchar *to);
#define PROT_WRITE 2 #define PROT_WRITE 2
#define MAP_NORESERVE 0 #define MAP_NORESERVE 0
#define MAP_SHARED 0x0001 #define MAP_SHARED 0x0001
#define MAP_PRIVATE 0x0002
#define MAP_NOSYNC 0x0800 #define MAP_NOSYNC 0x0800
#define MAP_FAILED ((void *)-1) #define MAP_FAILED ((void *)-1)
#define MS_SYNC 0x0000 #define MS_SYNC 0x0000
......
...@@ -43,22 +43,19 @@ int my_getpagesize(void) ...@@ -43,22 +43,19 @@ int my_getpagesize(void)
void *my_mmap(void *addr, size_t len, int prot, void *my_mmap(void *addr, size_t len, int prot,
int flags, int fd, my_off_t offset) int flags, int fd, my_off_t offset)
{ {
DWORD flProtect=0;
HANDLE hFileMap; HANDLE hFileMap;
LPVOID ptr; LPVOID ptr;
HANDLE hFile= (HANDLE)_get_osfhandle(fd); HANDLE hFile= (HANDLE)_get_osfhandle(fd);
if (hFile == INVALID_HANDLE_VALUE) if (hFile == INVALID_HANDLE_VALUE)
return MAP_FAILED; return MAP_FAILED;
flProtect|=SEC_COMMIT;
hFileMap=CreateFileMapping(hFile, &mmap_security_attributes, hFileMap=CreateFileMapping(hFile, &mmap_security_attributes,
PAGE_READWRITE, 0, (DWORD) len, NULL); PAGE_READWRITE, 0, (DWORD) len, NULL);
if (hFileMap == 0) if (hFileMap == 0)
return MAP_FAILED; return MAP_FAILED;
ptr=MapViewOfFile(hFileMap, ptr=MapViewOfFile(hFileMap,
flags & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ, prot & PROT_WRITE ? FILE_MAP_WRITE : FILE_MAP_READ,
(DWORD)(offset >> 32), (DWORD)offset, len); (DWORD)(offset >> 32), (DWORD)offset, len);
/* /*
......
...@@ -49,7 +49,6 @@ TODO: ...@@ -49,7 +49,6 @@ TODO:
#include "mysql_priv.h" #include "mysql_priv.h"
#include "ha_tina.h" #include "ha_tina.h"
#include <sys/mman.h>
#include <mysql/plugin.h> #include <mysql/plugin.h>
...@@ -143,7 +142,7 @@ int get_mmap(TINA_SHARE *share, int write) ...@@ -143,7 +142,7 @@ int get_mmap(TINA_SHARE *share, int write)
share->mapped_file= (byte *)my_mmap(NULL, share->file_stat.st_size, share->mapped_file= (byte *)my_mmap(NULL, share->file_stat.st_size,
PROT_READ, MAP_PRIVATE, PROT_READ, MAP_PRIVATE,
share->data_file, 0); share->data_file, 0);
if ((share->mapped_file ==(caddr_t)-1)) if ((share->mapped_file == MAP_FAILED))
{ {
/* /*
Bad idea you think? See the problem is that nothing actually checks Bad idea you think? See the problem is that nothing actually checks
...@@ -331,7 +330,7 @@ ha_tina::ha_tina(TABLE_SHARE *table_arg) ...@@ -331,7 +330,7 @@ ha_tina::ha_tina(TABLE_SHARE *table_arg)
records_is_known(0) records_is_known(0)
{ {
/* Set our original buffers from pre-allocated memory */ /* Set our original buffers from pre-allocated memory */
buffer.set(byte_buffer, IO_SIZE, system_charset_info); buffer.set((char*)byte_buffer, IO_SIZE, system_charset_info);
chain= chain_buffer; chain= chain_buffer;
} }
...@@ -688,7 +687,8 @@ int ha_tina::write_row(byte * buf) ...@@ -688,7 +687,8 @@ int ha_tina::write_row(byte * buf)
size= encode_quote(buf); size= encode_quote(buf);
if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP))) if (my_write(share->data_file, (byte*)buffer.ptr(), size,
MYF(MY_WME | MY_NABP)))
DBUG_RETURN(-1); DBUG_RETURN(-1);
/* /*
...@@ -740,7 +740,8 @@ int ha_tina::update_row(const byte * old_data, byte * new_data) ...@@ -740,7 +740,8 @@ int ha_tina::update_row(const byte * old_data, byte * new_data)
if (chain_append()) if (chain_append())
DBUG_RETURN(-1); DBUG_RETURN(-1);
if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP))) if (my_write(share->data_file, (byte*)buffer.ptr(), size,
MYF(MY_WME | MY_NABP)))
DBUG_RETURN(-1); DBUG_RETURN(-1);
/* UPDATE should never happen on the log tables */ /* UPDATE should never happen on the log tables */
...@@ -934,7 +935,7 @@ int ha_tina::rnd_end() ...@@ -934,7 +935,7 @@ int ha_tina::rnd_end()
if ((chain_ptr - chain) > 0) if ((chain_ptr - chain) > 0)
{ {
tina_set *ptr; tina_set *ptr;
off_t length; size_t length;
/* /*
Setting up writable map, this will contain all of the data after the Setting up writable map, this will contain all of the data after the
...@@ -958,15 +959,16 @@ int ha_tina::rnd_end() ...@@ -958,15 +959,16 @@ int ha_tina::rnd_end()
length= length - (size_t)(ptr->end - ptr->begin); length= length - (size_t)(ptr->end - ptr->begin);
} }
/* Truncate the file to the new size */ /* Unmap the file before the new size is set */
if (my_chsize(share->data_file, length, 0, MYF(MY_WME))) if (my_munmap(share->mapped_file, share->file_stat.st_size))
DBUG_RETURN(-1); DBUG_RETURN(-1);
/* We set it to null so that get_mmap() won't try to unmap it */
share->mapped_file= NULL;
if (my_munmap(share->mapped_file, length)) /* Set the file to the new size */
if (my_chsize(share->data_file, length, 0, MYF(MY_WME)))
DBUG_RETURN(-1); DBUG_RETURN(-1);
/* We set it to null so that get_mmap() won't try to unmap it */
share->mapped_file= NULL;
if (get_mmap(share, 0) > 0) if (get_mmap(share, 0) > 0)
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
...@@ -986,6 +988,13 @@ int ha_tina::delete_all_rows() ...@@ -986,6 +988,13 @@ int ha_tina::delete_all_rows()
if (!records_is_known) if (!records_is_known)
return (my_errno=HA_ERR_WRONG_COMMAND); return (my_errno=HA_ERR_WRONG_COMMAND);
/* Unmap the file before the new size is set */
if (share->mapped_file && my_munmap(share->mapped_file,
share->file_stat.st_size))
DBUG_RETURN(-1);
share->mapped_file= NULL;
/* Truncate the file to zero size */
int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME)); int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));
if (get_mmap(share, 0) > 0) if (get_mmap(share, 0) > 0)
......
...@@ -41,9 +41,9 @@ typedef struct st_tina_share { ...@@ -41,9 +41,9 @@ typedef struct st_tina_share {
THR_LOCK lock; THR_LOCK lock;
} TINA_SHARE; } TINA_SHARE;
typedef struct tina_set { struct tina_set {
off_t begin; off_t begin;
off_t end; off_t end;
}; };
class ha_tina: public handler class ha_tina: public handler
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment