`
xieyj
  • 浏览: 103237 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Item_field、Field、Table下面的record关系

阅读更多

    class Field下的ptr等于Table->record[0]的值

    这个比较复杂,可以从

         key_part_info->field= new Field_string(table->record[0],

                                             (uint32) key_part_info->length,

                                             (uchar*) 0,

                                             (uint) 0,

                                             Field::NONE,

                                             NullS, &my_charset_bin);

    看出来,逻辑分散太多,就不列举了

     sub_select()通过

      error= info->read_record(info);--int rr_sequential(READ_RECORD *info) 读取数据库记录,

#0  _mi_read_rnd_static_record (info=0x9205e28, buf=0x91fd920 "齮est1", ' ' <repeats 15 times>, filepos=21, skip_deleted_blocks=1 '\001') at mi_statrec.c:208

#1  0x083c2a96 in mi_scan (info=0x9205e28, buf=0x91fd920 "齮est1", ' ' <repeats 15 times>) at mi_scan.c:44

#2  0x083acbeb in ha_myisam::rnd_next (this=0x91fd7b0, buf=0x91fd920 "齮est1", ' ' <repeats 15 times>) at ha_myisam.cc:1602

#3  0x082dea16 in rr_sequential (info=0x913418c) at records.cc:390

#4  0x08261f55 in sub_select (join=0x9206110, join_tab=0x9134148, end_of_records=false) at sql_select.cc:16291

#5  0x082602fd in do_select (join=0x9206110, fields=0x90d5c78, table=0x0, procedure=0x0) at sql_select.cc:15832

#6  0x08267785 in JOIN::exec (this=0x9206110) at sql_select.cc:2886

#7  0x08268373 in mysql_select (thd=0x90d49c0, rref_pointer_array=0x90d5ce8, tables=0x91338f8, wild_num=1, fields=@0x90d5c78, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147764736, result=0x9133d90, unit=0x90d5950, select_lex=0x90d5be4) at sql_select.cc:3067

#8  0x0826887d in handle_select (thd=0x90d49c0, lex=0x90d58f4, result=0x9133d90, setup_tables_done_option=0) at sql_select.cc:310

#9  0x081e1af7 in execute_sqlcom_select (thd=0x90d49c0, all_tables=0x91338f8) at sql_parse.cc:4943

#10 0x081e432f in mysql_execute_command (thd=0x90d49c0) at sql_parse.cc:2157

#11 0x081ebbfa in mysql_parse (thd=0x90d49c0, inBuf=0x91337c0 "select * from test", length=18, found_semicolon=0xb54c5f14) at sql_parse.cc:5958

#12 0x081ecae6 in dispatch_command (command=COM_QUERY, thd=0x90d49c0, packet=0x912b901 "", packet_length=18) at sql_parse.cc:1049

#13 0x081eddaa in do_command (thd=0x90d49c0) at sql_parse.cc:731

#14 0x081dd5a7 in handle_one_connection (arg=0x90d49c0) at sql_connect.cc:1146

#15 0x4dfe92db in start_thread (arg=0xb54c6790) at pthread_create.c:296

#16 0x006cf14e in clone () from /lib/libc.so.6

 

       通过select_send发送到客户端  

       调用堆栈如下:

#0  select_send::send_data (this=0x9133d90, items=@0x90d5c78) at sql_class.cc:1771

#1  0x0823dee7 in end_send (join=0x9206110, join_tab=0x91342e8, end_of_records=false) at sql_select.cc:17264

#2  0x08261cef in evaluate_join_record (join=0x9206110, join_tab=0x9134148, error=<value optimized out>) at sql_select.cc:16536

#3  0x08261eeb in sub_select (join=0x9206110, join_tab=0x9134148, end_of_records=false) at sql_select.cc:16273

#4  0x082602fd in do_select (join=0x9206110, fields=0x90d5c78, table=0x0, procedure=0x0) at sql_select.cc:15832

#5  0x08267785 in JOIN::exec (this=0x9206110) at sql_select.cc:2886

#6  0x08268373 in mysql_select (thd=0x90d49c0, rref_pointer_array=0x90d5ce8, tables=0x91338f8, wild_num=1, fields=@0x90d5c78, conds=0x0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2147764736, result=0x9133d90, unit=0x90d5950, select_lex=0x90d5be4) at sql_select.cc:3067

#7  0x0826887d in handle_select (thd=0x90d49c0, lex=0x90d58f4, result=0x9133d90, setup_tables_done_option=0) at sql_select.cc:310

#8  0x081e1af7 in execute_sqlcom_select (thd=0x90d49c0, all_tables=0x91338f8) at sql_parse.cc:4943

#9  0x081e432f in mysql_execute_command (thd=0x90d49c0) at sql_parse.cc:2157

#10 0x081ebbfa in mysql_parse (thd=0x90d49c0, inBuf=0x91337c0 "select * from test", length=18, found_semicolon=0xb54c5f14) at sql_parse.cc:5958

#11 0x081ecae6 in dispatch_command (command=COM_QUERY, thd=0x90d49c0, packet=0x912b901 "", packet_length=18) at sql_parse.cc:1049

#12 0x081eddaa in do_command (thd=0x90d49c0) at sql_parse.cc:731

#13 0x081dd5a7 in handle_one_connection (arg=0x90d49c0) at sql_connect.cc:1146

#14 0x4dfe92db in start_thread (arg=0xb54c6790) at pthread_create.c:296

#15 0x006cf14e in clone () from /lib/libc.so.6

        具体看一下下面的函数

bool select_send::send_data(List<Item> &items)

protocol->send_result_set_row(&items)

item->send(this, &str_buffer)

}

 

bool Item_field::send(Protocol *protocol, String *buffer)

{

  return protocol->store(result_field);

}

 

bool Protocol_text::store(Field *field)

{

  if (field->is_null())

    return store_null();

#ifndef DBUG_OFF

  field_pos++;

#endif

  char buff[MAX_FIELD_WIDTH];

  String str(buff,sizeof(buff), &my_charset_bin);

  CHARSET_INFO *tocs= this->thd->variables.character_set_results;

#ifndef DBUG_OFF

  TABLE *table= field->table;

  my_bitmap_map *old_map= 0;

  if (table->file)

    old_map= dbug_tmp_use_all_columns(table, table->read_set);

#endif

 

  field->val_str(&str); --获取field的值,因为上面read_record,读取了单行记录,所以这里数据随record[0]的值改变而改变

#ifndef DBUG_OFF

  if (old_map)

    dbug_tmp_restore_column_map(table->read_set, old_map);

#endif

 

  return store_string_aux(str.ptr(), str.length(), str.charset(), tocs);

}

                                           

分享到:
评论

相关推荐

    利用标准的SQL语句实现查询记录分页

    WHERE (SELECT COUNT(*) FROM your_table t2 WHERE t2.order_field &lt; t1.order_field) &gt;= start_record AND (SELECT COUNT(*) FROM your_table t2 WHERE t2.order_field &lt; t1.order_field) &lt; end_record; ``` 这里...

    京东数据库设计.docx

    询价明细表 inquiry_order 询价订单表 询价订单表 integral_config 积分配置表 积分配置表 invoice 发票表 发票表 invoice_pic 发票对应图片表 发票对应图片表 item_attr_value_item(属性属性值和商品关系表) ...

    LINQ_TO_SQL语法与实例大全

    select new { record.Field1, NestedType = new { record.Field2, record.Field3 } }; ``` ##### 8. 本地方法调用形式(LocalMethodCall) 可以在Select中调用本地方法: ```csharp public static string ...

    CPP.zip_Table

    首先,表(Table)是关系数据库的核心组成部分,它是一个二维数据结构,由多行多列组成。这种结构与我们常见的电子表格类似,可以直观地展示和管理数据。每一张表都有一个唯一的名称,用来区分数据库中的其他表。 ...

    Clojure学习——持久化框架clj-record

    (record:defrecord MyRecord [field1 field2] :db/table :my_table) ``` 这里,`:db/table`是元数据,指定了记录对应的数据库表名。 3. 创建记录实例: ```clojure (def my-instance (-&gt;MyRecord "value1" ...

    Synopse Big Table 1.12b

    use Record.Field in your Delphi code). Classic Key/Value storage is always possible via TSynBigTable or TSynBigTableString, but is now faster and safer. A few issues were corrected

    Hudi_Large_Scale_Near_Real_Time_Pipelines_at_Uber

    hoodie.datasource.write.recordkey.field=_userID hoodie.datasource.write.partitionpath.field=country # Schema provider properties hoodie.deltastreamer.filebased.schemaprovider.source.schema.file=...

    Bank.zip_Table_条件查询

    下面将详细讨论这个主题。 1. **表(Table)**: 在数据库中,表是数据存储的基本单元,它由一系列行和列组成,类似于电子表格。每一行代表一个记录,每一列则表示一种属性或特征。例如,在银行数据库中,"Bank"表...

    Bootstrop table实现增删改查,以及行内编辑,附带数据

    $('#myTable').bootstrapTable('remove', {field: 'id', value: row.id}); }, error: function() { // 错误处理 } }); } }); ``` 对于查询,Bootstrap Table支持通过搜索框进行简单的文本匹配。如果需要更...

    MYSQL培训经典教程

    这包括数据库(Database)、表(Table)、字段(Field)和记录(Record)等。数据库是存储数据的容器,表是由列(Field)和行(Record)组成的结构,字段是表中的每一个单元格,记录则是表中的一行数据。 接下来,...

    Oracle PLSQL中Records编程实例

    值得注意的是,与VARRAY和嵌套TABLE类型不同,RECORD类型不能直接在数据库中创建和存储。它们只能作为PL/SQL程序的一部分存在。 下面有两个使用Records的实例: **示例1**: 假设有一个名为CITY的物理表,包含两个...

    C#的SAP系统对接示例_C#SAP系统_sap对接_

    record[field.Name] = field.Value; } return record; } ``` 以上就是C#与SAP系统对接的基础操作,包括连接、获取表数据和获取指定记录。实际应用中,可能还需要处理错误、事务管理、性能优化等更复杂的场景。...

    SQL操作基础

    2. 表(Table):数据库中的数据结构,由行(Record)和列(Field)组成。 3. 主键(Primary Key):表中唯一标识一行数据的字段,不允许有重复值。 4. 外键(Foreign Key):连接不同表之间的键,引用其他表的主键...

    PLSQL编程03

    CREATE TYPE my_record_type AS OBJECT ( field1 datatype1, field2 datatype2, ... ); ``` 或者,如果你想要创建一个与特定表结构匹配的记录类型,可以使用`%ROWTYPE`关键字: ```sql DECLARE my_table_row ...

    Oracle 45 道面试题及答案.docx

    可以通过使用NEXT_FIELD来迭代特定块中的项,并且NEXT_RECORD遍历块中的记录。 FMX不能转换或反向回到FMB文件,以确保它们不会丢失。 当验证的LOV设置为True时,Oracle Forms将文本项的当前值与LOV中显示的第一列...

    AE接口详细说明

    row.Value(0) = "New Record"; table.InsertRow(row); ``` 通过以上对接口的详细介绍,我们可以看到ArcGIS中这些接口的强大功能以及如何使用它们来操作地理数据。理解这些接口的工作原理可以帮助开发者更好地构建...

    c#打开Paradox 5.x/7.x db数据库源码

    foreach (var record in table.Records) { // 访问字段 foreach (var field in record.Fields) { Console.WriteLine($"{field.Name}: {field.Value}"); } } } ``` 将Paradox数据复制到DBF文件,你需要另一...

Global site tag (gtag.js) - Google Analytics