/** Get value from the config table. The caller must ensure that enough spaceisallocatedforvaluetoholdthecolumncontents. @paramtrxtransaction @paramtableIndexedftstable @paramnamenameofthekey @paramvaluevalueofthekey
@return DB_SUCCESS or error code */
dberr_t fts_config_get_value(FTSQueryExecutor *executor, const dict_table_t *table, constchar *name, fts_string_t *value) noexcept
{
executor->trx()->op_info= "getting FTS config value";
ConfigReader reader;
dberr_t err= executor->read_config_with_lock(name, reader); if (err == DB_SUCCESS)
{
ulint max_len= ut_min(value->f_len - 1, reader.value_span.size());
memcpy(value->f_str, reader.value_span.data(), max_len);
value->f_len= max_len;
value->f_str[value->f_len]= '\0';
executor->release_lock();
} else value->f_str[0]= '\0'; return err;
}
/*********************************************************************//**
Create the config table name for retrieving index specific value.
@return index config parameter name */ char*
fts_config_create_index_param_name( /*===============================*/ constchar* param, /*!< in: base name of param */ const dict_index_t* index) /*!< in: index for config */
{
ulint len; char* name;
/* The format of the config name is: name_<index_id>. */
len = strlen(param);
/* Caller is responsible for deleting name. */
name = static_cast<char*>(ut_malloc_nokey(
len + FTS_AUX_MIN_TABLE_ID_LENGTH + 2));
::strcpy(name, param);
name[len] = '_';
fts_write_object_id(index->id, name + len + 1,
FTS_AUX_MIN_TABLE_ID_LENGTH + 1);
return(name);
}
/******************************************************************//**
Get value specific to an FTS index from the config table. The caller
must ensure that enough space is allocated for value to hold the
column contents.
@return DB_SUCCESS or error code */
dberr_t
fts_config_get_index_value( /*=======================*/
FTSQueryExecutor* executor, /*!< in: query executor */
dict_index_t* index, /*!< in: index */ constchar* param, /*!< in: get config value for
this parameter name */
fts_string_t* value) noexcept /*!< out: value read from
config table */
{ /* We are responsible for free'ing name. */ char *name = fts_config_create_index_param_name(param, index);
/** Set the value in the config table for name. @paramexecutorqueryexecutor @paramtableindexedfulltexttable @paramnamekeyfortheconfig @paramvaluevalueofthekey
@return DB_SUCCESS or error code */
dberr_t
fts_config_set_value(FTSQueryExecutor *executor, const dict_table_t *table, constchar *name, const fts_string_t *value) noexcept
{
executor->trx()->op_info= "setting FTS config value"; char value_str[FTS_MAX_CONFIG_VALUE_LEN + 1];
memcpy(value_str, value->f_str, value->f_len);
value_str[value->f_len]= '\0'; return executor->update_config_record(name, value_str);
}
/******************************************************************//**
Set the value specific to an FTS index in the config table.
@return DB_SUCCESS or error code */
dberr_t
fts_config_set_index_value( /*=======================*/
FTSQueryExecutor* executor, /*!< in: query executor */
dict_index_t* index, /*!< in: index */ constchar* param, /*!< in: get config value for
this parameter name */
fts_string_t* value) noexcept /*!< out: value read from
config table */
{ /* We are responsible for free'ing name. */ char *name = fts_config_create_index_param_name(param, index);
/** Set an ulint value in the config table. @paramtrxtransaction @paramtableusertable @paramnamenameofthekey @paramint_valuevalueofthekeytobeset
@return DB_SUCCESS if all OK else error code */
dberr_t
fts_config_set_ulint(FTSQueryExecutor *executor, const dict_table_t *table, constchar *name, ulint int_value) noexcept
{
fts_string_t value; /* We set the length of value to the max bytes it can hold. This
information is used by the callback that reads the value.*/
value.f_len= FTS_MAX_CONFIG_VALUE_LEN;
value.f_str= static_cast<byte*>(ut_malloc_nokey(value.f_len + 1));
ut_a(FTS_MAX_INT_LEN < FTS_MAX_CONFIG_VALUE_LEN);
value.f_len= (ulint) snprintf((char*) value.f_str, FTS_MAX_INT_LEN,
ULINTPF, int_value);
dberr_t error= fts_config_set_value(executor, table, name, &value); if (UNIV_UNLIKELY(error != DB_SUCCESS))
sql_print_error("InnoDB: (%s) writing `%s'", ut_strerr(error), name);
ut_free(value.f_str); return error;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.