List:Rhein-Neckar MySQL Users Group« Previous MessageNext Message »
From:Kristian Köhntopp Date:May 3 2006 9:13am
Subject:Re: __rowid ...
View as plain text  
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öpfner3 May
  • Re: __rowid ...Kristian Köhntopp3 May