On Wednesday, 3. May 2006 10:11, Hagen Höpfner wrote:
> However, ich erinnere mich, dass erwähnt wurde,
> dass man mit __rowid auf einen internen Identifikator der Datensätze
> zugreifen könne.
In den Quellen von 5.0.18 findet sich in sql/sql_base.cc eine FUnktion
find_field_in_table(). Dort gibt es ein Flag "allow_rowid", das der Funktion
mitgegeben wird:
/*
Find field by name in a base table or a view with temp table algorithm.
SYNOPSIS
find_field_in_table()
thd thread handler
table table where to search for the field
name name of field
length length of name
allow_rowid do allow finding of "_rowid" field?
cached_field_index_ptr cached position in field list (used to speedup
lookup for fields in prepared tables)
RETURN
0 field is not found
# pointer to field
*/
Field *
find_field_in_table(THD *thd, TABLE *table, const char *name, uint length,
bool allow_rowid, uint *cached_field_index_ptr)
{
...
Die Abfrage sieht dann wie folgt aus:
if (field_ptr && *field_ptr)
...
else
{
if (!allow_rowid ||
my_strcasecmp(system_charset_info, name, "_rowid") ||
!(field=table->rowid_field))
DBUG_RETURN((Field*) 0);
}
Das heißt, das Feld heißt, wenn es zugreifbar ist, wahrscheinlich _rowid
(Unterstrich rowid). Es ist jedoch nur dann sichtbar, wenn die Funktion
find_field_in_table mit dem entsprechenden Erlaubnisflag allow_rowid = true
aufgerufen wird.
Mir ist aber im Moment nicht bekannt, wann diese Funktion (oder
find_field_in_table_ref) mit diesem Flag wie herum gesetzt aufgerufen wird.
Kristian
--
Kristian Koehntopp, Senior Consultant, MySQL AB, Karlsruhe, Germany
Skype: kristian.koehntopp, MySQL-SIP 4519, Irc: Isotopp, ICQ: 309698212
Email: kris@stripped, Timezone: CEST (GMT+0200)
MySQL Consulting: http://mysql.com/consulting
| Thread |
|---|
| • __rowid ... | Hagen Höpfner | 3 May |
| • Re: __rowid ... | Kristian Köhntopp | 3 May |