mysql item_MySQL源代碼:關于MySQL的Item對象

前篇介紹了MySQL如何從SQL語句轉換成一個內部對象。本文是前篇的延續,將更加詳細的介紹WHERE語句對應的Item對象。

1. Item對象@MySQL Internal

MySQL Internals Manual較為詳細的介紹了Item對象。Item對象經常被稱作"thingamabob"(A thingamabob is a noun used to describe items that either you can't remember the name of or that don't actually exist.)。Item是一個類,每一個Item實例都:(1)代表一個SQL語句里的對象;(2)有取值;(3)有數據類型指針。

下面列出的的SQL相關的對象都是一個Item對象,或者繼承至Item:(1)一段字符; (2)數據表的某列; (3)一個局部或全局變量; (4)一個存儲過程的變量; (5) 一個用戶參數; (6)一個函數/存儲過程(這包括運算符+、||、=、like等) 。例如下面的SQL語句:

SELECT UPPER(column1) FROM t WHERE column2 = @x;

MySQL需要一系列的Item來描述上面的SQL:一個描述column1對象,描述UPPER函數的對象,還有描述WHERE語句的幾個相關的Item對象。Item對象可以理解做一個特殊的數據對象。MySQL的Item對象定義在./sql/item.h中,其子類都定義在./sql/item*.h中,例如item_cmpfunc.h, item_func.h。在MySQL Server層代碼中有大量操作和使用Item對象的代碼,建議閱讀的時候,慢慢理解。

2. WHERE對應的Item對象

本節將介紹MySQL中如何使用Item對象描述一個WHERE條件。下面從簡單到復雜,逐個介紹:

2.1 WHERE id >= 1 and id < 3

2.2 WHERE id = 1 or id >10

2.3 WHERE id >= 0 and id < 2 or id = 20

daa62867098b900f96d8fd73e5a0eaf6.png

驗證:

(gdb) p ((Item_cond *)conds)->functype()

$5 = Item_func::COND_OR_FUNC

打印WHERE(也就是Item_cond_or) List中的第一個元素:

(gdb) p ((Item_cond *)(((Item_cond *)conds)->list->first->info))->functype()

$17 = Item_func::COND_AND_FUNC

第二個元素

(gdb) p ((Item_cond *)(((Item_cond *)conds)->list->first->next->info))->functype()

$18 = Item_func::EQ_FUNC

2.4 WHERE (id = 10 or … ) and id >= 15

WHERE (id = 10 or id < 3 ) and id >= 15

aa6ab411b40b797fa081af6012bd9492.png

(gdb) p ((Item_cond_or *)((Item_cond_and *)conds)->list->first->info)->list->first

$39 = (list_node *) 0x7facfc005698

(gdb) p ((Item_cond_or *)((Item_cond_and *)conds)->list->first->info)->list->first->info

$40 = (void *) 0x7facfc005150

(gdb) p (Item *)$40

$41 = (Item *) 0x7facfc005150

(gdb) p ((Item *)$40)->type()

$42 = Item::FUNC_ITEM

(gdb) p ((Item_func *)$40)->functype()

$43 = Item_func::EQ_FUNC

(gdb) p ((Item_func_eq *)$40)->arg_count

$44 = 2

(gdb) p ((Item_func_eq *)$40)->args[0]

$45 = (Item *) 0x7facfc004fe0

2.5 WHERE id >= 15 or (id > 1 and id ?< 10)

6d54d5eb9b5b27290373670249b5dead.png

(gdb) p ((Item *)conds)->type()

$47 = Item::COND_ITEM

(gdb) p ((Item_cond *)conds)->functype()

$48 = Item_func::COND_OR_FUNC

(gdb) p ((Item_cond_or *)conds)->list->first->next->info

$56 = (void *) 0x7facfc0058b8

(gdb) p ((Item *)$56)->type()

$57 = Item::COND_ITEM

(gdb) p ((Item_cond *)$56)->functype()

$58 = Item_func::COND_AND_FUNC

2.6 WHERE id >= 15 or ( … and ( … or … ))

WHERE id >= 15 or ( id > 1 and ( id < 4 or id = 0 ))

5e95d25292db80dc8402d148cd41a24e.png

3. Item對象的繼承關系圖

3.1 Item_bool_func的繼承關系圖

89361e11bf3512a151204f4dc22c2ccc.png

3.2 完整Item對象繼承關系圖

完整的Item繼承關系圖非常復雜,下面是縮略圖:(完整圖,1.8MB,謹慎打開)

classItem__inherit__graph-s.png

這是一幅龐大關系圖,使用doxygen+graphviz繪制(如何使用doxygen;如何配置doxygen生成MySQL文檔)。

參考

MySQL source code

MySQL Internal Manual

覺得文章有用?立即:

和朋友一起 共學習 共進步!

猜您喜歡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python的發展趨勢圖_用Python繪制趨勢圖

我在數據幀中有以下數據&#xff1a;-------------------------------------------------------| Physician Profile Id | Program Year | Value Of Interest |-------------------------------------------------------| 1004777 | 2013 | 83434288.00 || 1004777 | 2014 | 89…

mysql的實現類注解_Mybaits (XML方式:無需在寫Dao的實現類 注解方式:Dao的實現類與Mapper都可以不寫 重點理解)...

Maven的pom.xml 坐標配置4.0.0Mybatis_mavenday01_mbatis1.0-SNAPSHOTjarorg.mybatismybatis3.4.5mysqlmysql-connector-java5.1.45junitjunit4.12testorg.apache.maven.pluginsmaven-compiler-plugin2.3.21.81.8UTF-8mybatis的配置文件/p>PUBLIC "-//mybatis.org//DTD…

SQL字符串中單引號與換行符的轉義

問題 打算將文本文件內容添加至MySQL數據庫&#xff0c;則需要對文本中的單引號和換行符進行轉義&#xff0c;否則無法編寫合法的SQL。 解法 迭代文本文件的行時&#xff0c;將原行尾的換行符剔除掉&#xff0c;并拼接\\n;迭代文本文件的行時&#xff0c;將原行中的替換成。…

mysql 建庫字段_MySQL 的字段類型以及建庫策略

一、數字類型所謂的“數字類”&#xff0c;就是指 DECIMAL 和NUMERIC&#xff0c;它們是同一種類型。它嚴格的說不是一種數字類型&#xff0c;因為他們實際上是將數字以字符串形式保存的&#xff1b;他的值的每一位(包括小數點)占一個字節的存儲空間&#xff0c;因此這種類型耗…

mysql中建立text_mysql中text

一&#xff0c;char類型char列的長度固定為創建表時聲明的長度。長度可以為從0到255的任何值。當保存char值時&#xff0c;在它們的右邊填充空格以達到指定的長度。當檢索到char值時&#xff0c;尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。二&#xff0c;varcha…

前后分離接口規范

前后分離接口規范 隨著互聯網的高速發展&#xff0c;前端頁面的展示、交互體驗越來越靈活、炫麗&#xff0c;響應體驗也要求越來越高&#xff0c;后端服務的高并發、高可用、高性能、高擴展等特性的要求也愈加苛刻&#xff0c;從而導致前后端研發各自專注于自己擅長的領域深耕…

mysql proxy 悲觀鎖_mysql悲觀鎖總結和實踐

使用場景舉例&#xff1a;以MySQL InnoDB為例商品t_goods表中有一個字段status&#xff0c;status為1代表商品未被下單&#xff0c;status為2代表商品已經被下單&#xff0c;那么我們對某個商品下單時必須確保該商品status為1。假設商品的id為1。一、如果不采用鎖&#xff0c;那…

MySQL吉連_Learn Jdbc : Java, Jdbc, Odbc

Learn Jdbc : Java, Jdbc, Odbc 介紹Learn Jdbc : Java, Jdbc, OdbcLearn JDBC we precisely name what we are going to help you for Learning.As you are Beginner we keep in mind the same thing,we think like you and try to Build Apps Like Java Deep Learning,Java B…

python虛擬環境打包deb_可以為python腳本創建deb包嗎?

下面是python腳本源包的一個基本示例。雖然大多數打包教程都有點復雜&#xff0c;但如果遇到問題&#xff0c;它們確實可以幫助您。也就是說&#xff0c;我首先通過簡單地查看Debian包來學習Debian打包的基礎知識。獲取相似的源代碼并通過示例學習。在以下是您的基本源程序包布…

python順序結構實驗報告_Python 數據結構 之 串 的順序存儲結構

本文所采用的數據結構模板為 《數據結構教程》C語言版&#xff0c;李春葆、尹為民等著。改篇所涉及到的是 串 的順序存儲結構。用Python仿照C語言來實現。代碼地址&#xff1a;串 的順序存儲結構:# !/usr/bin/env python# -*- coding: utf-8 -*-__author__ MrHero""…

java五子棋源代碼_java 五子棋游戲源碼

【實例簡介】【實例截圖】【核心代碼】package game;import java.applet.Applet;import java.applet.AudioClip;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.even…

java界面化_java怎么實現圖形化界面

展開全部java圖形化界面還62616964757a686964616fe78988e69d8331333363373232是有很多內容要學習的&#xff0c;可以參考 如下實例&#xff1a;public class Test extends JFrame{MyPanel mpnull;public static void main(String[] args){// TODO Auto-generated method stubTe…

java圖形用戶登錄界面_Java簡單登錄圖形界面

一.登錄界面1.程序代碼1 import java.awt.*;//導入awt包2 import javax.swing.*;//導入swing包3 import java.awt.event.ActionListener;//導入awt包中的監聽器事件包4 import java.awt.event.ActionEvent;//導入awt包中的ActionEvent事件包56 public class EnterScreen extend…

北大青鳥java y2_Struts-2 北大青鳥 Y2學年 項目案例使用 2框架開發租房網站 Java Develop 249萬源代碼下載- www.pudn.com...

文件名稱: Struts-2下載 收藏√ [5 4 3 2 1 ]開發工具: Java文件大小: 10225 KB上傳時間: 2016-01-03下載次數: 0提 供 者: 姜鵬詳細說明&#xff1a;北大青鳥 Y2學年 項目案例使用Struts 2框架開發租房網站-My English LOW文件列表(點擊判斷是否您需要的文件&#xff0c…

java int 包_int readInt()

int readInt()描述 (Description)java.io.ObjectInputStream.readInt()方法讀取32位int。聲明 (Declaration)以下是java.io.ObjectInputStream.readInt()方法的聲明。public int readInt()參數 (Parameters)NA返回值 (Return Value)此方法不返回值。異常 (Exception)EOFExcepti…

java i o是什么流_Java I/O流的總結

I/O的類結構圖I/O的分類根據處理的數據類型分為&#xff1a;字節流和字符流。根據數據流向分為&#xff1a;輸入流和輸出流。流又可分為節點流和處理流。節點流直接與數據源相連處理流與節點流一起使用&#xff0c;在節點流的基礎上&#xff0c;再嵌套一層。提高文件的讀取效率…

java i18n實例_Java國際化(i18n)格式化日期

本篇文章幫大家學習java國際化(i18n)格式化日期&#xff0c;包含了Java國際化(i18n)格式化日期使用方法、操作技巧、實例演示和注意事項&#xff0c;有一定的學習價值&#xff0c;大家可以用來參考。DateFormat類提供了各種格式來格式化日期。 以下是一些格式的列表。DateForma…

java placeholder_java – 如何在JTextfield中設置像Placeholder一樣的文本

我用來覆蓋文本字段繪制方法,直到我最終得到更多的自定義文本字段然后我真的想…然后我發現this prompt API易于使用,不需要你擴展任何組件.它還有一個很好的“伙伴”API這已經被包含在SwingLabs,SwingX library中,這使得它甚至可以使用……例如(這使用SwingX-1.6.4)import jav…

java web聊天室私聊map_java websocket聊天室示例(springboot)

【實例簡介】【實例截圖】【核心代碼】package com.example.demo;import java.io.IOException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ConcurrentHashMap;import javax.websocket.OnClose;import …

Java 內存映射讀取文件_Java內存映射 大文件輕松處理|chu

前言內存映射文件(Memory-mapped File)&#xff0c;指的是將一段虛擬內存逐字節映射于一個文件&#xff0c;使得應用程序處理文件如同訪問主內存(但在真正使用到這些數據前卻不會消耗物理內存&#xff0c;也不會有讀寫磁盤的操作)&#xff0c;這要比直接文件讀寫快幾個數量級。…