mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	* use new deprecated printer for all deprecated server options * restore alphabetic option sorting order * move deprecated printer from mysqld.cc to my_getopt.c * in --help print deprecation message at the end of the option help * move 'ALL' help text where it belongs - to other SET options, and with a correct indentation. * consistently end all or none command-line option help strings with a dot - my_print_help() needs that. It's about 50/50 now, so let's do none, less line wraps in --help * remove trailing spaces from command-line option help strings
		
			
				
	
	
		
			273 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Copyright (c) 2005, 2011, Oracle and/or its affiliates
 | 
						|
 | 
						|
   This program is free software; you can redistribute it and/or modify
 | 
						|
   it under the terms of the GNU General Public License as published by
 | 
						|
   the Free Software Foundation; version 2 of the License.
 | 
						|
 | 
						|
   This program 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 General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1335  USA */
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <ctype.h>
 | 
						|
#include <mysql/plugin.h>
 | 
						|
 | 
						|
#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__)  || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
 | 
						|
#define __attribute__(A)
 | 
						|
#endif
 | 
						|
 | 
						|
static long number_of_calls= 0; /* for SHOW STATUS, see below */
 | 
						|
 | 
						|
/*
 | 
						|
  Simple full-text parser plugin that acts as a replacement for the
 | 
						|
  built-in full-text parser:
 | 
						|
  - All non-whitespace characters are significant and are interpreted as
 | 
						|
   "word characters."
 | 
						|
  - Whitespace characters are space, tab, CR, LF.
 | 
						|
  - There is no minimum word length.  Non-whitespace sequences of one
 | 
						|
    character or longer are words.
 | 
						|
  - Stopwords are used in non-boolean mode, not used in boolean mode.
 | 
						|
*/
 | 
						|
 | 
						|
/*
 | 
						|
  simple_parser interface functions:
 | 
						|
 | 
						|
  Plugin declaration functions:
 | 
						|
  - simple_parser_plugin_init()
 | 
						|
  - simple_parser_plugin_deinit()
 | 
						|
 | 
						|
  Parser descriptor functions:
 | 
						|
  - simple_parser_parse()
 | 
						|
  - simple_parser_init()
 | 
						|
  - simple_parser_deinit()
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Initialize the parser plugin at server start or plugin installation.
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    simple_parser_plugin_init()
 | 
						|
 | 
						|
  DESCRIPTION
 | 
						|
    Does nothing.
 | 
						|
 | 
						|
  RETURN VALUE
 | 
						|
    0                    success
 | 
						|
    1                    failure (cannot happen)
 | 
						|
*/
 | 
						|
 | 
						|
static int simple_parser_plugin_init(void *arg __attribute__((unused)))
 | 
						|
{
 | 
						|
  return(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Terminate the parser plugin at server shutdown or plugin deinstallation.
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    simple_parser_plugin_deinit()
 | 
						|
    Does nothing.
 | 
						|
 | 
						|
  RETURN VALUE
 | 
						|
    0                    success
 | 
						|
    1                    failure (cannot happen)
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
static int simple_parser_plugin_deinit(void *arg __attribute__((unused)))
 | 
						|
{
 | 
						|
  return(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Initialize the parser on the first use in the query
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    simple_parser_init()
 | 
						|
 | 
						|
  DESCRIPTION
 | 
						|
    Does nothing.
 | 
						|
 | 
						|
  RETURN VALUE
 | 
						|
    0                    success
 | 
						|
    1                    failure (cannot happen)
 | 
						|
*/
 | 
						|
 | 
						|
static int simple_parser_init(MYSQL_FTPARSER_PARAM *param
 | 
						|
                              __attribute__((unused)))
 | 
						|
{
 | 
						|
  return(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Terminate the parser at the end of the query
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    simple_parser_deinit()
 | 
						|
 | 
						|
  DESCRIPTION
 | 
						|
    Does nothing.
 | 
						|
 | 
						|
  RETURN VALUE
 | 
						|
    0                    success
 | 
						|
    1                    failure (cannot happen)
 | 
						|
*/
 | 
						|
 | 
						|
static int simple_parser_deinit(MYSQL_FTPARSER_PARAM *param
 | 
						|
                                __attribute__((unused)))
 | 
						|
{
 | 
						|
  return(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Pass a word back to the server.
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    add_word()
 | 
						|
      param              parsing context of the plugin
 | 
						|
      word               a word
 | 
						|
      len                word length
 | 
						|
 | 
						|
  DESCRIPTION
 | 
						|
    Fill in boolean metadata for the word (if parsing in boolean mode)
 | 
						|
    and pass the word to the server.  The server adds the word to
 | 
						|
    a full-text index when parsing for indexing, or adds the word to
 | 
						|
    the list of search terms when parsing a search string.
 | 
						|
*/
 | 
						|
 | 
						|
static void add_word(MYSQL_FTPARSER_PARAM *param, const char *word, size_t len)
 | 
						|
{
 | 
						|
  MYSQL_FTPARSER_BOOLEAN_INFO bool_info=
 | 
						|
    { FT_TOKEN_WORD, 0, 0, 0, 0, ' ', 0 };
 | 
						|
 | 
						|
  param->mysql_add_word(param, word, (int)len, &bool_info);
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
  Parse a document or a search query.
 | 
						|
 | 
						|
  SYNOPSIS
 | 
						|
    simple_parser_parse()
 | 
						|
      param              parsing context
 | 
						|
 | 
						|
  DESCRIPTION
 | 
						|
    This is the main plugin function which is called to parse
 | 
						|
    a document or a search query. The call mode is set in
 | 
						|
    param->mode.  This function simply splits the text into words
 | 
						|
    and passes every word to the MySQL full-text indexing engine.
 | 
						|
*/
 | 
						|
 | 
						|
static int simple_parser_parse(MYSQL_FTPARSER_PARAM *param)
 | 
						|
{
 | 
						|
  const char *end, *start, *docend= param->doc + param->length;
 | 
						|
 | 
						|
  number_of_calls++;
 | 
						|
 | 
						|
  for (end= start= param->doc;; end++)
 | 
						|
  {
 | 
						|
    if (end == docend)
 | 
						|
    {
 | 
						|
      if (end > start)
 | 
						|
        add_word(param, start, end - start);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    else if (isspace(*end))
 | 
						|
    {
 | 
						|
      if (end > start)
 | 
						|
        add_word(param, start, end - start);
 | 
						|
      start= end + 1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return(0);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
  Plugin type-specific descriptor
 | 
						|
*/
 | 
						|
 | 
						|
static struct st_mysql_ftparser simple_parser_descriptor=
 | 
						|
{
 | 
						|
  MYSQL_FTPARSER_INTERFACE_VERSION, /* interface version      */
 | 
						|
  simple_parser_parse,              /* parsing function       */
 | 
						|
  simple_parser_init,               /* parser init function   */
 | 
						|
  simple_parser_deinit              /* parser deinit function */
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
  Plugin status variables for SHOW STATUS
 | 
						|
*/
 | 
						|
 | 
						|
static struct st_mysql_show_var simple_status[]=
 | 
						|
{
 | 
						|
  {"A_static",   (char *)"just a static text",     SHOW_CHAR},
 | 
						|
  {"called",     (char *)&number_of_calls, SHOW_LONG},
 | 
						|
  {0,0,0}
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
  Plugin system variables.
 | 
						|
*/
 | 
						|
 | 
						|
static long     sysvar_one_value;
 | 
						|
static char     *sysvar_two_value;
 | 
						|
 | 
						|
static MYSQL_SYSVAR_LONG(simple_sysvar_one, sysvar_one_value,
 | 
						|
  PLUGIN_VAR_RQCMDARG,
 | 
						|
  "Simple fulltext parser example system variable number one. Give a number",
 | 
						|
  NULL, NULL, 77L, 7L, 777L, 0);
 | 
						|
 | 
						|
static MYSQL_SYSVAR_STR(simple_sysvar_two, sysvar_two_value,
 | 
						|
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
 | 
						|
  "Simple fulltext parser example system variable number two. Give a string",
 | 
						|
  NULL, NULL, "simple sysvar two default");
 | 
						|
 | 
						|
static MYSQL_THDVAR_LONG(simple_thdvar_one,
 | 
						|
  PLUGIN_VAR_RQCMDARG,
 | 
						|
  "Simple fulltext parser example thread variable number one. Give a number",
 | 
						|
  NULL, NULL, 88L, 8L, 888L, 0);
 | 
						|
 | 
						|
static MYSQL_THDVAR_STR(simple_thdvar_two,
 | 
						|
  PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
 | 
						|
  "Simple fulltext parser example thread variable number two. Give a string",
 | 
						|
  NULL, NULL, "simple thdvar two default");
 | 
						|
 | 
						|
static struct st_mysql_sys_var* simple_system_variables[]= {
 | 
						|
  MYSQL_SYSVAR(simple_sysvar_one),
 | 
						|
  MYSQL_SYSVAR(simple_sysvar_two),
 | 
						|
  MYSQL_SYSVAR(simple_thdvar_one),
 | 
						|
  MYSQL_SYSVAR(simple_thdvar_two),
 | 
						|
  NULL
 | 
						|
};
 | 
						|
 | 
						|
/*
 | 
						|
  Plugin library descriptor
 | 
						|
*/
 | 
						|
 | 
						|
maria_declare_plugin(ftexample)
 | 
						|
{
 | 
						|
  MYSQL_FTPARSER_PLUGIN,      /* type                            */
 | 
						|
  &simple_parser_descriptor,  /* descriptor                      */
 | 
						|
  "simple_parser",            /* name                            */
 | 
						|
  "Sergei Golubchik",         /* author                          */
 | 
						|
  "Simple Full-Text Parser",  /* description                     */
 | 
						|
  PLUGIN_LICENSE_GPL,
 | 
						|
  simple_parser_plugin_init,  /* init function (when loaded)     */
 | 
						|
  simple_parser_plugin_deinit,/* deinit function (when unloaded) */
 | 
						|
  0x0001,                     /* version                         */
 | 
						|
  simple_status,              /* status variables                */
 | 
						|
  simple_system_variables,    /* system variables                */
 | 
						|
  "0.01",                     /* string version */
 | 
						|
  MariaDB_PLUGIN_MATURITY_EXPERIMENTAL /* maturity */
 | 
						|
}
 | 
						|
maria_declare_plugin_end;
 |