mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	 e42c980967
			
		
	
	e42c980967
	
	
	
		
			
			The table opening process now works the following way: - Create common TABLE_SHARE object - Read the .frm file and unpack it into the TABLE_SHARE object - Create a TABLE object based on the information in the TABLE_SHARE object and open a handler to the table object Other noteworthy changes: - In TABLE_SHARE the most common strings are now LEX_STRING's - Better error message when table is not found - Variable table_cache is now renamed 'table_open_cache' - New variable 'table_definition_cache' that is the number of table defintions that will be cached - strxnmov() calls are now fixed to avoid overflows - strxnmov() will now always add one end \0 to result - engine objects are now created with a TABLE_SHARE object instead of a TABLE object. - After creating a field object one must call field->init(table) before using it - For a busy system this change will give you: - Less memory usage for table object - Faster opening of tables (if it's has been in use or is in table definition cache) - Allow you to cache many table definitions objects - Faster drop of table
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Copyright (C) 2002 MySQL AB
 | |
|    
 | |
|    This library is free software; you can redistribute it and/or
 | |
|    modify it under the terms of the GNU Library General Public
 | |
|    License as published by the Free Software Foundation; either
 | |
|    version 2 of the License, or (at your option) any later version.
 | |
|    
 | |
|    This library is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|    Library General Public License for more details.
 | |
|    
 | |
|    You should have received a copy of the GNU Library General Public
 | |
|    License along with this library; if not, write to the Free
 | |
|    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 | |
|    MA 02111-1307, USA */
 | |
| 
 | |
| /*  File   : strxnmov.c
 | |
|     Author : Richard A. O'Keefe.
 | |
|     Updated: 2 June 1984
 | |
|     Defines: strxnmov()
 | |
| 
 | |
|     strxnmov(dst, len, src1, ..., srcn, NullS)
 | |
|     moves the first len characters of the concatenation of src1,...,srcn
 | |
|     to dst and add a closing NUL character.
 | |
|     It is just like strnmov except that it concatenates multiple sources.
 | |
|     Beware: the last argument should be the null character pointer.
 | |
|     Take VERY great care not to omit it!  Also be careful to use NullS
 | |
|     and NOT to use 0, as on some machines 0 is not the same size as a
 | |
|     character pointer, or not the same bit pattern as NullS.
 | |
| 
 | |
|     NOTE
 | |
|       strxnmov is like strnmov in that it moves up to len
 | |
|       characters; dst will be padded on the right with one '\0' character.
 | |
|       if total-string-length >= length then dst[length] will be set to \0
 | |
| */
 | |
| 
 | |
| #include <my_global.h>
 | |
| #include "m_string.h"
 | |
| #include <stdarg.h>
 | |
| 
 | |
| char *strxnmov(char *dst,uint len, const char *src, ...)
 | |
| {
 | |
|   va_list pvar;
 | |
|   char *end_of_dst=dst+len;
 | |
| 
 | |
|   va_start(pvar,src);
 | |
|   while (src != NullS)
 | |
|   {
 | |
|     do
 | |
|     {
 | |
|       if (dst == end_of_dst)
 | |
| 	goto end;
 | |
|     }
 | |
|     while ((*dst++ = *src++));
 | |
|     dst--;
 | |
|     src = va_arg(pvar, char *);
 | |
|   }
 | |
| end:
 | |
|   *dst=0;
 | |
|   va_end(pvar);
 | |
|   return dst;
 | |
| }
 |