日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

int转换为cstring_PostgreSQL 隐式类型转换探秘

發布時間:2023/12/10 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 int转换为cstring_PostgreSQL 隐式类型转换探秘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

個人簡介

何小棟, 從事產品研發和架構設計工作,對Oracle、PostgreSQL有深入研究,ITPUB數據庫版塊資深版主。現就職于廣州云圖數據技術有限公司,系統架構師,博客:http://blog.itpub.net/6906/

摘要

本文通過與Oracle隱式類型轉換的比較簡要介紹了PostgreSQL中的隱式類型轉換,包括Oracle隱式類型轉換的機制、PostgreSQL隱式類型轉換的機制和原理。

一、緣起

在進入正題前,我們先看下面一個案例,在psql中執行以下SQL:

-- 創建表

testdb=# create table t_cast (id int);

CREATE TABLE

--?插入數據

testdb=# insert into t_cast values(1),(2),(3);

INSERT 0 3

--?查詢數據

testdb=# select * from t_cast where id = '1';

?id

----

??1

(1 row)

testdb=# select * from t_cast where id = '1'::text;

psql: ERROR: ?operator does not exist: integer = text

LINE 1: select * from t_cast where id = '1'::text;

??????????????????????????????????????^

HINT: ?No operator matches the given name and argument types. You might need to add explicit type casts.

數據表t_cast中的id列類型為int,執行第一條SQL沒有出錯,第二條SQL則出錯,錯誤信息為沒有相匹配的operator,給出的HINT為添加顯式類型轉換。對于熟悉Oracle數據庫的同學來說,不禁會產生疑問:’1’和’1’::text不都是字符類型嗎?兩者不是一回事?而同樣的SQL,在Oracle中則不會報錯,處理機制跟PostgreSQL有什么不同??

二、Oracle隱式類型轉換機制

上面列出的幾個問題暫時擱置,我們先來看看同樣的SQL在Oracle中的執行結果:

TEST-orcl@DESKTOP-V430TU3>create table t_cast (id int) tablespace users;

Table created.

TEST-orcl@DESKTOP-V430TU3>insert into t_cast values(1);

1 row created.

TEST-orcl@DESKTOP-V430TU3>insert into t_cast values(2);

1 row created.

TEST-orcl@DESKTOP-V430TU3>insert into t_cast values(3);

1 row created.

TEST-orcl@DESKTOP-V430TU3>select * from t_cast where id = '1';

????????ID

----------

?????????1

TEST-orcl@DESKTOP-V430TU3>select * from t_cast where id = cast('1' as varchar2(2));

????????ID

----------

?????????1

在Oracle中不會出錯,查閱Oracle文檔[1],發現Oracle使用數據類型優先級來判定隱式數據類型轉換的先后順序,優先級由高到低順序如下:

1.?Datetime和interval數據類型

2.?BINARY_DOUBLE

3.?BINARY_FLOAT

4.?NUMBER

5.?字符數據類型

6.?其他內置數據類型

以上例來說,NUMBER與字符數據類型進行等值比較,那么字符類型會自動隱式轉換為NUMBER進行比較,而不是把NUMBER轉換為字符類型,因為NUMBER優先級高于字符類型。

關于Oracle的隱式轉換機制,根據Oracle文檔[1],其轉換規則如下:

1.?在INSERT/UPDATE操作中,轉換數據值為相應的列數據類型

2.?在SELECT FROM操作中,轉換列數據類型為目標類型

3. 在操作數值型數據時,調整為最大可用的精度&刻度。在這種情況下,這些操作產生的數據類型可能與基表中的數據類型不同

4.?在比較字符型和數值型數據時,轉換字符型為數值型

5.?在字符型/數值型數據與浮點數之間轉換時可能不精確,因為字符類型和NUMBER使用十進制精度,而浮點數使用二進制精度

6.?轉換CLOB為字符類型(如VARCHAR2),或者轉換BLOB轉換為RAW時,如果需要轉換的數據大小比目標數據類型可表示的要大,則返回錯誤

7.?TIMESTAMP轉換為DATE時,時間戳中秒的小數部分將被截斷(較老的版本會四舍五入)

8.?BINARY_FLOAT轉換為BINARY_DOUBLE時不會丟失精度

9.?BINARY_DOUBLE轉換為BINARY_FLOAT會丟失精度(如使用超過float更大的位數來表示精度)

10.?在比較字符型和日期型數據時,轉換字符型為日期型

11.?輸入的參數與函數或者操作符參數不匹配時,轉換為相應的數據類型

12.?在賦值時,把等號右邊的數據轉換為左邊目標數據類型

13.?在字符串拼接操作時,轉換非字符類型為字符類型

14.?在對字符/非字符數據類型進行算術運算/比較時,根據需要會將所有字符類型轉換為數值/日期/Rowid

15. 大多數的SQL函數可接受CLOB類型作為參數,這時候會執行CLOB和字符類型之間的轉換。如果CLOB大小超過4000Byte,則只獲取CLOB中的4000Byte

16.?在RAW/LONG RAW和字符類型之間相互轉換時,二進制數據會被表示為十六進制的格式,一個十六進制字符表示RAW數據中的4位

17. 在CHAR和VARCHAR2以及NCHAR和NVARCHAR2之間比較時可能需要不同的字符集。這種情況下默認的轉換方向是從數據庫字符集轉換為國家字符集

更詳細的信息請參考Oracle文檔。

三、PostgreSQL隱式類型轉換機制

這一小節通過回答先前提到幾個問題來嘗試解析PostgreSQL的隱式類型轉換機制。

’1’和’1’::text是一回事嗎?

在SQL語句中,’1’和’1’::text是一回事嗎?從實際執行結果來看,顯然不是一回事,否則使用后者就不會出錯了。

一般來說,在PostgreSQL中,SQL語句在執行前需要經過三個步驟:詞法分析、語法分析和語義分析。在詞法分析階段,SQL語句中的’1’會被視為string literal(字符串文字),注意是string literal不是string value(字符串值)!string literal意思是在單引號或雙引號中的一串字符,在PostgreSQL中如果string literal沒有指定類型,那么該string literal的數據類型會被認為是unknown,如指定類型則為指定的數據類型。例如:

select * from t_cast where id = '1';

未指定類型,‘1’類型為unknown

select * from t_cast where id = '1'::text;

指定了數據類型,1’的類型為text

int與text類型比較,為何會報錯?

int與text類型比較,為何會報錯?實際上,PostgreSQL根據系統目錄中的定義來確定類型D1和類型D2能否執行某個操作O。

在示例中,‘=’為二元操作符,左操作數類型為int,右操作數類型為text,在pg_operator系統目錄中,不存在該operator和相應操作數類型的定義:

testdb=# select oprname,oprleft::regtype,oprright::regtype,oprcode from pg_operator where oprname='=' and oprleft::regtype='int'::regtype;

?oprname | oprleft | oprright | oprcode

---------+---------+----------+---------

?= ??????| integer | bigint ??| int48eq

?= ??????| integer | integer ?| int4eq

?= ??????| integer | smallint | int42eq

(3 rows)

testdb=# select oprname,oprleft::regtype,oprright::regtype,oprcode from pg_operator where oprname='=' and oprright::regtype='text'::regtype;

?oprname | oprleft | oprright | ?oprcode ??

---------+---------+----------+------------

?= ??????| text ???| text ????| texteq

?= ??????| name ???| text ????| nameeqtext

(2 rows)

而且int和text并沒有在pg_cast系統目錄中定義為可相互轉換:

testdb=# select castsource::regtype,casttarget::regtype,castfunc from pg_cast where castsource::regtype='integer'::regtype;

?castsource | ???casttarget ???| castfunc

------------+------------------+----------

?integer ???| bigint ??????????| ?????481

?integer ???| smallint ????????| ?????314

?integer ???| real ????????????| ?????318

?integer ???| double precision | ?????316

?integer ???| numeric ?????????| ????1740

?integer ???| money ???????????| ????3811

?integer ???| boolean ?????????| ????2557

?integer ???| oid ?????????????| ???????0

?integer ???| regproc ?????????| ???????0

?integer ???| regprocedure ????| ???????0

?integer ???| regoper ?????????| ???????0

?integer ???| regoperator ?????| ???????0

?integer ???| regclass ????????| ???????0

?integer ???| regtype ?????????| ???????0

?integer ???| regconfig ???????| ???????0

?integer ???| regdictionary ???| ???????0

?integer ???| regrole ?????????| ???????0

?integer ???| regnamespace ????| ???????0

?integer ???| "char" ??????????| ??????78

?integer ???| bit ?????????????| ????1683

(20 rows)

testdb=# select castsource::regtype,casttarget::regtype,castfunc from pg_cast where castsource::regtype='text'::regtype;

?castsource | ???casttarget ????| castfunc

------------+-------------------+----------

?text ??????| regclass ?????????| ????1079

?text ??????| character ????????| ???????0

?text ??????| character varying | ???????0

?text ??????| "char" ???????????| ?????944

?text ??????| name ?????????????| ?????407

?text ??????| xml ??????????????| ????2896

(6 rows)

既沒有定義operator也沒有定義數據類型cast,因此int與text等值比較會報錯。

如何確定轉換方向?

接下來的一個問題是int類型與unknown類型以及int與text比較,是int轉換為text類型還是text類型轉換為int類型?是否有優先級之分?

第一個問題,int類型與unknown類型比較的轉換方向。在PostgreSQL中,不單是int類型,包括其他確定的數據類型,如存在滿足條件的operator,unknown都會轉換為確定的數據類型進行比較,轉換失敗則報錯。

例如:

testdb=# select * from t_cast where id = '1.1';

psql: ERROR: ?invalid input syntax for type integer: "1.1"

LINE 1: select * from t_cast where id = '1.1';

????????????????????????????????????????^

id為int類型,‘1.1’為unknown類型,PostgreSQL會嘗試吧‘1.1’轉換為整型與id進行比較,轉換不了則失敗報錯。值得一提的是,報錯信息提示語法錯誤,也就是說PostgreSQL在語法分析階段已發現錯誤而不是在執行階段才發現數據類型轉換錯誤。

第二個問題,int與text比較時的轉換方向。剛才已看到,在原生的PostgreSQL中沒有定義int與text的轉換,但可通過create cast命令自定義類型轉換:

testdb=# create cast(integer as text) with inout as implicit;

CREATE CAST

testdb=# create cast(text as integer) with inout as implicit;

CREATE CAST

我們同時定義了int和text的相互轉換,那到底使用哪一個CAST呢?

testdb=# explain select * from t_cast where id = '1'::text;

psql: ERROR: ?operator is not unique: integer = text

LINE 1: explain select * from t_cast where id = '1'::text;

??????????????????????????????????????????????^

HINT: ?Could not choose a best candidate operator. You might need to add explicit type casts.

PostgreSQL給出的答案是無法處理,無法確定使用哪一個候選而報錯。如果我們需要實現Oracle兼容性(轉換為NUMBER比較),那么保留text到int的轉換即可:

testdb=# drop cast(integer as text);

DROP CAST

testdb=# explain select * from t_cast where id = '1'::text;

???????????????????????QUERY PLAN ??????????????????????

--------------------------------------------------------

?Seq Scan on t_cast ?(cost=0.00..41.88 rows=13 width=4)

???Filter: (id = 1)

(2 rows)

除了定義cast來實現int和text的比較外,還可以通過自定義operator來實現,這一部分不在本文的討論范圍,暫且略過。

PostgreSQL的隱式類型轉換在官方文檔有詳細說明[2],這里不再詳細展開。

四、PostgreSQL隱式類型轉換原理

下面從源碼(PostgreSQL 12 beta1)上來對隱式類型轉換的原理作一簡要解析,包括使用的數據結構FormData_pg_cast以及實現函數make_op等。

數據結構

FormData_pg_cast結構體定義了pg_cast中數據的結構

/* ----------------

?* ???pg_cast definition. ?cpp turns this into

?* ???typedef struct FormData_pg_cast

?* ----------------

?*/

CATALOG(pg_cast,2605,CastRelationId)

{

??Oid ????oid; ?????/* oid */

??/* source datatype for cast */

??Oid ????castsource BKI_LOOKUP(pg_type);//源類型

??/* destination datatype for cast */

??Oid ????casttarget BKI_LOOKUP(pg_type);//目標類型

??/* cast function; 0 = binary coercible */

??Oid ????castfunc BKI_LOOKUP(pg_proc);//轉換函數

??/* contexts in which cast can be used */

??char ???castcontext;//上下文,i-表達式,a-賦值,e-顯式類型轉換

??/* cast method */

//f-通過castfunc定義的函數轉換,b-二元運算符中的轉換,i-函數參數轉換

??char ???castmethod;

} FormData_pg_cast;

/* ----------------

?* ???Form_pg_cast corresponds to a pointer to a tuple with

?* ???the format of pg_cast relation.

?* ----------------

?*/

typedef FormData_pg_cast *Form_pg_cast;

make_op

該函數通過變換操作符表達式以及執行類型轉換以確保操作數類型兼容。

相關代碼如下:

Expr *

make_op(ParseState *pstate, List *opname, Node *ltree, Node *rtree,

????Node *last_srf, int location)

{

?/* otherwise, binary operator */

????//二元操作符

????ltypeId = exprType(ltree);

????rtypeId = exprType(rtree);

????tup = oper(pstate, opname, ltypeId, rtypeId, false, location);

????/* otherwise, binary operator */

//二元操作符

????args = list_make2(ltree, rtree);

????actual_arg_types[0] = ltypeId;

????actual_arg_types[1] = rtypeId;

????declared_arg_types[0] = opform->oprleft;//左操作數

????declared_arg_types[1] = opform->oprright;//右操作數

????nargs = 2;

//調用函數make_fn_arguments實現參數類型轉換

??make_fn_arguments(pstate, args, actual_arg_types, declared_arg_types);

make_fn_arguments

調用coerce_type函數實現轉換

void

make_fn_arguments(ParseState *pstate,

??????????List *fargs,

??????????Oid *actual_arg_types,

??????????Oid *declared_arg_types)

{

????????…

//執行轉換

????????node = coerce_type(pstate,//?ParseState結構體

???????????????????node,//節點(實際類型為List?*)

???????????????????actual_arg_types[i],//實際操作符

???????????????????declared_arg_types[i],//聲明操作符?

-1,//?targetTypeMod

???????????????????COERCION_IMPLICIT,//?CoercionContext

???????????????????COERCE_IMPLICIT_CAST,//?CoercionForm

???????????????????-1);//?location

coerce_type

該函數判斷類型是為unknown,如為unknown則轉換為另一確定操作數的數據類型,最終的轉換實現在stringTypeDatum中

Node *

coerce_type(ParseState *pstate, Node *node,

??????Oid inputTypeId, Oid targetTypeId, int32 targetTypeMod,

??????CoercionContext ccontext, CoercionForm cformat, int location)

{

??if (inputTypeId == UNKNOWNOID && IsA(node, Const))

??{

//--------- 輸入類型為unknown并且是常量

Const ???*con = (Const *) node;//常量

Const ???*newcon = makeNode(Const);//轉換后的常量

???/*

?????* We assume here that UNKNOWN's internal representation is the same

?????* as CSTRING.

?????* 內部表示跟CSTRING一樣

?????*/

????if (!con->constisnull)

??????newcon->constvalue = stringTypeDatum(baseType,

?????????????????????????DatumGetCString(con->constvalue),

?????????????????????????inputTypeMod);//調用DatumGetCString函數

????else

??????newcon->constvalue = stringTypeDatum(baseType,

?????????????????????????NULL,

?????????????????????????inputTypeMod);//NULL值

stringTypeDatum

stringTypeDatum調用了int4in/?pg_strtoint32函數對string?literal進行解析

/*

?* ???int4in ?????- converts "num" to int4

?*/

Datum

int4in(PG_FUNCTION_ARGS)

{

??char ????*num = PG_GETARG_CSTRING(0);

??PG_RETURN_INT32(pg_strtoint32(num));

}

/*

?* Convert input string to a signed 32 bit integer.

?*

?* Allows any number of leading or trailing whitespace characters. Will throw

?* ereport() upon bad input format or overflow.

?*

?* NB: Accumulate input as a negative number, to deal with two's complement

?* representation of the most negative number, which can't be represented as a

?* positive number.

?*/

int32

pg_strtoint32(const char *s)

{

??const char *ptr = s;

??int32 ??tmp = 0;

??bool ???neg = false;

??/* skip leading spaces */

??while (likely(*ptr) && isspace((unsigned char) *ptr))

????ptr++;

??/* handle sign */

??if (*ptr == '-')

??{

????ptr++;

????neg = true;

??}

??else if (*ptr == '+')

????ptr++;

??/* require at least one digit */

??if (unlikely(!isdigit((unsigned char) *ptr)))

????goto invalid_syntax;

??/* process digits */

??while (*ptr && isdigit((unsigned char) *ptr))//如'123',-1->-12->-123

??{

//獲取數字

????int8 ???digit = (*ptr++ - '0');//’0’到’9’ASCII值 – ‘0’得到數字

????if (unlikely(pg_mul_s32_overflow(tmp, 10, &tmp)) ||//tmp*10

??????unlikely(pg_sub_s32_overflow(tmp, digit, &tmp)))//tmp - digit

??????goto out_of_range;

??}

??/* allow trailing whitespace, but not other trailing chars */

??while (*ptr != '\0' && isspace((unsigned char) *ptr))

????ptr++;

??if (unlikely(*ptr != '\0'))

????goto invalid_syntax;

??if (!neg)

??{

????/* could fail if input is most negative number */

????if (unlikely(tmp == PG_INT32_MIN))

??????goto out_of_range;

????tmp = -tmp;//取反,-123->123

??}

??return tmp;

out_of_range://越界

??ereport(ERROR,

??????(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),

???????errmsg("value \"%s\" is out of range for type %s",

??????????s, "integer")));

invalid_syntax://非法的語法

??ereport(ERROR,

??????(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),

???????errmsg("invalid input syntax for type %s: \"%s\"",

??????????"integer", s)));

??return 0; ????/* keep compiler quiet */

}

PostgreSQL相對于Oracle最大的優勢在于可以通過閱讀源碼了解數據庫的底層實現原理,真正的做到知其然知其所以然。

五、參考資料

1、Oracle?Data Type Comparison Rules

https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF30027

2、PostgreSQL Type Conversion

https://www.postgresql.org/docs/11/typeconv-overview.html

PostgreSQL中文社區歡迎廣大技術人員投稿

投稿郵箱:press@postgres.cn

總結

以上是生活随笔為你收集整理的int转换为cstring_PostgreSQL 隐式类型转换探秘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产中文字幕大全 | 国产亚洲精品日韩在线tv黄 | 日日天天 | 国产精品久久精品国产 | 久久综合天天 | 欧美日韩一区三区 | 黄色a在线观看 | 国产黄大片 | 色综合久久99 | 精品视频久久久 | 在线观看一级片 | 欧美精品国产精品 | 91片黄在线观看动漫 | 亚洲午夜精品久久久久久久久 | 色99之美女主播在线视频 | 高潮久久久 | 91精品欧美一区二区三区 | www.xxxx欧美 | 嫩草伊人久久精品少妇av | 97人人澡人人爽人人模亚洲 | 精品国产理论 | 99精品久久精品一区二区 | 视频在线99 | 二区三区在线观看 | 人人插人人看 | 国产精品一区欧美 | 国产国语在线 | 国产精品九九视频 | 91黄视频在线 | 亚洲免费av网站 | 精品国产乱码久久久久久1区二区 | 久久免费在线视频 | 国产一区免费在线观看 | 成人国产电影在线观看 | 人人要人人澡人人爽人人dvd | 精品在线视频一区二区三区 | 国产黄色av影视 | 日韩午夜电影 | 精品一区二区在线免费观看 | 在线午夜 | 精品福利av | 国产a国产 | 国产色综合天天综合网 | 国产精品一区二区av麻豆 | 久免费| 二区三区av | 一区三区视频 | 日本久久久影视 | 香蕉久久久久久av成人 | 制服丝袜在线 | 18国产精品福利片久久婷 | 999久久久国产精品 高清av免费观看 | 香蕉视频国产在线观看 | 久久99精品国产99久久6尤 | 精品欧美一区二区在线观看 | 中文字幕成人网 | 欧美激情综合网 | 美女黄频 | 国产精品久久久久久久久久免费看 | aa级黄色大片 | 婷婷久久网站 | 色吊丝在线永久观看最新版本 | 精品欧美在线视频 | 亚欧日韩成人h片 | 国产高清精| 欧美日韩免费观看一区二区三区 | 亚洲国产久 | 国产精品完整版 | 在线视频 影院 | 亚洲性xxxx | 亚洲精品一区二区18漫画 | 四虎影视成人永久免费观看视频 | 国产在线超碰 | 黄色免费高清视频 | a成人在线| 亚洲 欧美日韩 国产 中文 | 久久免费视频3 | 91久久精品一区二区三区 | 国产成人免费高清 | 国产流白浆高潮在线观看 | 91麻豆精品国产91久久久久久 | 少妇搡bbbb搡bbb搡忠贞 | 九九热免费观看 | 亚洲一区视频免费观看 | 999久久精品 | 国产经典av | 久久国产精品99久久久久久老狼 | 亚洲日本欧美 | 亚洲精品激情 | 99久久精品国产一区 | 91精品啪啪 | 国产理伦在线 | 欧美一级欧美一级 | 日韩在线看片 | 麻豆播放 | 中文字幕免费一区 | 国产成人精品网站 | 国产精品日韩久久久久 | 在线观看日本高清mv视频 | 精品视频国产一区 | 狠狠久久 | 日韩黄色软件 | 久久久久观看 | 国产免费久久av | 黄污视频大全 | 精品视频成人 | 亚洲 欧洲 国产 精品 | 日韩成人在线免费观看 | 国产精品手机在线观看 | 天天操天天曰 | 99精品国产福利在线观看免费 | 免费看av片网站 | 91在线文字幕 | 久久久久久久久久亚洲精品 | 亚洲欧美国产视频 | 香蕉视频国产在线 | 99精品国产一区二区三区麻豆 | 黄色免费网站下载 | 夜色.com| 韩国一区二区av | 精品中文字幕在线 | 精品久久久久国产免费第一页 | av片一区二区 | 中文字幕电影高清在线观看 | 又爽又黄又无遮挡网站动态图 | 97操操操| 欧美国产不卡 | www.伊人网| 国产999精品 | 色九九在线 | 天天射综合网站 | 九九99视频 | 91精品成人久久 | 99热在线国产精品 | 99国产成+人+综合+亚洲 欧美 | 天天做日日爱夜夜爽 | 欧美一级淫片videoshd | 久久少妇 | 99精品免费视频 | 又湿又紧又大又爽a视频国产 | 五月激情丁香 | 久久久久看片 | 天天色成人网 | 免费91麻豆精品国产自产在线观看 | 91精品视频在线免费观看 | 人人爽人人做 | 免费在线观看日韩 | 色停停五月天 | www免费视频com━ | 在线免费观看欧美日韩 | 日韩字幕在线观看 | 久久久久综合网 | 久久亚洲综合国产精品99麻豆的功能介绍 | 中文字幕乱视频 | 欧美最新大片在线看 | 久久久久久伊人 | 国产精品一区二区久久国产 | 国产精品久久久区三区天天噜 | 精品a级片 | 91成人精品一区在线播放69 | 狠狠五月婷婷 | 激情图片qvod | 亚洲自拍偷拍色图 | 99久久精品国产观看 | 久久精品二区 | 久久99久久99精品免费看小说 | 成人亚洲网 | 久久视频在线观看中文字幕 | 91重口视频 | 久香蕉| 97人人看 | 日日干干夜夜 | 色综合天天综合 | 99精品电影| 亚洲丝袜中文 | 国产 在线 高清 精品 | 黄色一级网 | 色老板在线视频 | 亚洲日韩欧美一区二区在线 | 97在线视频网站 | 97人人模人人爽人人喊中文字 | 毛片无卡免费无播放器 | 五月激情丁香图片 | 六月色婷| 久草在线最新免费 | 91麻豆精品| 又色又爽又黄高潮的免费视频 | 日本三级大片 | 十八岁免进欧美 | 久久久久9999亚洲精品 | 五月在线| 福利视频 | 麻豆视频免费观看 | 久久精品专区 | 成人国产精品av | 久久久久久久久艹 | 久久久国产精品一区二区三区 | 一级黄色视屏 | www国产亚洲精品久久麻豆 | 日韩中文字幕在线不卡 | 99亚洲天堂 | 中文字幕亚洲精品在线观看 | 久久99精品波多结衣一区 | 99国产视频 | 国产亚洲精品女人久久久久久 | 国产精品久久视频 | 亚洲一区二区精品视频 | 91成版人在线观看入口 | 韩国av不卡 | 色七七亚洲影院 | 精品视频99 | 免费91在线观看 | 亚洲黄色片 | 999久久久免费精品国产 | 国产精品18久久久久久不卡孕妇 | 国产成人精品一区一区一区 | 欧美不卡视频在线 | 成人精品一区二区三区电影免费 | 久青草影院 | 亚洲电影成人 | 国产手机视频在线播放 | 亚洲 欧美变态 另类 综合 | 日韩黄色大片在线观看 | 美女啪啪图片 | 国色天香av| 91亚洲影院| 国内精品久久久久国产 | 午夜电影中文字幕 | 有码中文在线 | 人人狠 | 97在线精品视频 | 亚洲精品在线免费 | 在线免费观看亚洲视频 | 中文字幕在线播放av | 久久久国产影视 | 玖玖爱免费视频 | 国产精品2020 | 久久久久免费精品国产 | 日韩视频一区二区在线 | 麻豆视频www | 日韩av手机在线看 | 91亚洲夫妻 | 91桃花视频| 狠狠色狠狠色综合系列 | 免费在线观看av网站 | 日韩区在线观看 | av中文字幕在线免费观看 | 麻豆91视频 | 婷婷丁香自拍 | 色综合天天色综合 | 亚洲免费国产视频 | 深爱综合网 | 色妞色视频一区二区三区四区 | 免费看黄色91 | 成人aaa毛片 | 婷婷丁香激情网 | 色婷丁香 | 五月婷婷六月丁香激情 | 香蕉视频18| 天天操天天操天天操 | 色夜视频| 三级av网站 | 人人爽久久涩噜噜噜网站 | 夜夜骑天天操 | 国产一级二级三级视频 | 日批视频在线 | 中文资源在线播放 | 久久久久久久精 | japanesefreesex中国少妇 | 亚洲乱码精品久久久 | 精品亚洲二区 | 国产黄色片免费在线观看 | 啪嗒啪嗒免费观看完整版 | 日韩在线 | 激情五月在线观看 | 亚洲成av人影院 | 91麻豆精品久久久久久 | 丝袜精品视频 | 久久久久观看 | 日日夜夜天天干 | 亚洲国产色一区 | 成人在线视频免费看 | 亚洲欧美国产精品久久久久 | 欧美一级性生活视频 | 色天天久久 | 中文字幕在线免费观看视频 | 69精品在线 | 91黄色在线观看 | 国产综合小视频 | 久草视频免费播放 | 国产韩国日本高清视频 | 丁香婷婷在线观看 | 午夜av剧场| 人人爽夜夜爽 | 欧美日韩亚洲在线观看 | 国产最新91 | 在线视频精品播放 | 天天操天天射天天 | 午夜精品久久久久久 | 91漂亮少妇露脸在线播放 | 激情视频综合网 | 日韩在线激情 | 国产丝袜美腿在线 | 9999精品视频 | 欧美国产大片 | 99国产一区二区三精品乱码 | 国产美女免费观看 | 国产男女免费完整视频 | 色婷婷狠狠五月综合天色拍 | 久久经典国产视频 | 超碰97在线人人 | 夜夜躁天天躁很躁波 | 在线观看中文字幕亚洲 | 97香蕉久久超级碰碰高清版 | 国产视频一区二区在线播放 | 日韩视频精品在线 | 国产视频一区二区三区在线 | 亚洲永久精品在线 | 久久精品国产一区二区 | 久草精品视频在线观看 | 美女久久久久 | 午夜三级理论 | 激情av五月婷婷 | 日韩av高清在线观看 | 伊人丁香| 欧美一区二区在线免费观看 | 久久99婷婷 | 久久综合久久综合久久综合 | 久久久久国产精品免费 | 日韩在线网 | 97福利| 黄色大全免费网站 | 国产在线精品一区 | 中文字幕91视频 | 国产专区第一页 | 麻豆国产在线播放 | 美女网站色免费 | 久久精品视频日本 | 在线免费色 | 91资源在线免费观看 | 中文字幕亚洲欧美日韩2019 | 日韩.com | 日韩一区二区三免费高清在线观看 | 国产97在线看 | 有没有在线观看av | 99久高清在线观看视频99精品热在线观看视频 | 久久久91精品国产一区二区三区 | 在线亚洲免费视频 | 在线视频黄| 国产一级片免费播放 | 国产精品 久久 | 日韩伦理片一区二区三区 | 日韩高清片 | 狠狠干电影 | 97看片网| 国产精品久久久久久久久久久久久 | 天天射天天操天天干 | 麻豆视传媒官网免费观看 | 亚洲最大的av网站 | 久久精品视频免费播放 | 人人干网站 | 久久久久久久久国产 | 成人免费视频在线观看 | 操操操av | 久久国产品 | 日韩激情第一页 | 亚洲精品在线网站 | 欧美va天堂va视频va在线 | 亚洲人成影院在线 | 丁香婷婷综合网 | 蜜臀av性久久久久蜜臀av | www.xxxx变态.com | 91香蕉视频色版 | 8x8x在线观看视频 | 午夜精品成人一区二区三区 | 久久精品4 | 成人黄色免费观看 | 久久久国产精品亚洲一区 | 天堂va在线观看 | 免费久久久久久 | 日韩视频免费观看高清 | 国产中文字幕亚洲 | 美女一级毛片视频 | 91丨九色丨高潮丰满 | 超碰人人草人人 | 亚洲天堂视频在线 | 国产探花视频在线播放 | 在线观看黄色av | 国产精品麻豆一区二区三区 | 国产伦理久久精品久久久久_ | 国产99久久久国产精品成人免费 | 丝袜美腿一区 | 97日日碰人人模人人澡分享吧 | 五月婷婷av在线 | 丁香婷婷在线 | 在线看av网址 | 国产精品久久久影视 | 免费午夜在线视频 | 天天干,天天射,天天操,天天摸 | 色久av| 亚洲日日射 | 色网站中文字幕 | 久久三级毛片 | 国产专区在线视频 | 日韩高清一区 | 国产精品久久一区二区三区, | 手机在线看永久av片免费 | 中文字幕一区二区三区在线视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 四虎影视av | 成人免费视频观看 | 色资源网免费观看视频 | 日韩视频一区二区三区在线播放免费观看 | 欧美日韩调教 | 久草com| 尤物九九久久国产精品的分类 | 国产精品美女免费看 | 在线观看亚洲成人 | 爱色婷婷 | 77国产精品| 亚洲乱亚洲乱亚洲 | 精品国产乱码久久久久 | 伊人影院99 | 亚洲成人中文在线 | 亚洲天天摸日日摸天天欢 | 国产麻豆精品久久 | 欧美日韩99 | 天天综合网 天天 | 成人啪啪18免费游戏链接 | 日本久久久精品视频 | 国产在线免费av | 久久99精品久久久久婷婷 | 久久tv视频 | 主播av在线| 香蕉免费在线 | 天天操天天操天天 | 欧美日韩免费看 | 亚洲精品播放 | 天天干,天天射,天天操,天天摸 | 伊人天天综合 | 美女久久网站 | 亚洲国产精品激情在线观看 | 日韩av在线看 | 国产美女精品视频免费观看 | 亚洲国产资源 | 日韩特黄av | 久久久久久久久久久精 | 久久久99精品免费观看app | 亚洲精品av中文字幕在线在线 | 99久久久久| 国产精品都在这里 | 亚洲v欧美v国产v在线观看 | 91精品国产欧美一区二区成人 | 最近中文字幕视频网 | 处女av在线| 中文字幕在线观看日本 | 色av男人的天堂免费在线 | 久久久九色精品国产一区二区三区 | 在线中文字幕播放 | 欧美精品v国产精品v日韩精品 | 亚洲精品乱码久久久久久久久久 | 久久久午夜视频 | av观看网站| 在线观看一级片 | 2020天天干夜夜爽 | 2022国产精品视频 | 免费男女羞羞的视频网站中文字幕 | 青草草在线 | 久久精品精品电影网 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 色噜噜噜 | 91精品久久久久久综合乱菊 | 欧美精品久久久久久久久老牛影院 | 天天干,天天操,天天射 | 亚洲天堂社区 | 国产高清在线免费观看 | 在线观看爱爱视频 | 91九色porny蝌蚪主页 | 国产不卡在线 | 色婷婷午夜 | 天天草视频 | 久久免费视频2 | 欧美日韩精品在线 | 欧美一区二区三区在线播放 | av视屏在线| 国产精品久久久毛片 | 2020天天干天天操 | 日韩av免费大片 | 福利电影一区二区 | 日韩国产精品久久久久久亚洲 | 婷婷综合电影 | 国产在线视频资源 | 国产二区免费视频 | 午夜美女福利直播 | 午夜精品一区二区三区视频免费看 | 精品国偷自产在线 | 亚洲国产大片 | 三级小视频在线观看 | 日韩在线视频一区二区三区 | 国产在线高清精品 | 欧美五月婷婷 | 免费视频久久久 | 婷婷网址| 24小时日本在线www免费的 | 九九九九精品九九九九 | 特级西西人体444是什么意思 | 久久久五月婷婷 | 日韩激情片在线观看 | 国产精品美女久久久久久久久久久 | 狠狠干免费| 91视频高清完整版 | 91福利视频久久久久 | 亚洲一二区视频 | 久操免费视频 | 91九色精品国产 | 国产一区二区不卡在线 | 成人综合婷婷国产精品久久免费 | 欧美一区二区三区不卡 | 超碰在线人人草 | 亚洲情感电影大片 | 亚洲激情中文 | 国产精品午夜8888 | 四虎最新入口 | 午夜 免费 | 黄色片网站| av在线免费不卡 | 97视频免费观看 | 黄污网站在线 | 免费色视频在线 | 亚洲毛片一区二区三区 | 久草视频国产 | 色天天综合久久久久综合片 | 欧美视频99 | 欧美极品一区二区三区 | 亚洲视频观看 | 国产美女被啪进深处喷白浆视频 | 免费激情在线电影 | av黄色影院| 97电影手机版 | 中文字幕欧美激情 | 国产成人99av超碰超爽 | 久久欧洲视频 | 麻豆视频国产在线观看 | 日产av在线播放 | 久久久久久网址 | 成人黄色大片 | 亚洲日本韩国一区二区 | 成人欧美日韩国产 | 久久深爱网 | 天天干天天射天天插 | 国产精品美女久久久久久久网站 | 亚洲综合视频在线 | 色天天综合久久久久综合片 | 免费人成在线观看网站 | 国产精品va在线播放 | 久久久久在线视频 | 一级成人免费 | 免费观看一级成人毛片 | 国产成人精品午夜在线播放 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 中文字幕2021| 久久国产精品成人免费浪潮 | 91av视频在线观看 | 香蕉久久国产 | 日韩免费看的电影 | 国产精品一区久久久久 | 国产精品资源 | 成人动漫一区二区三区 | 免费看黄视频 | 亚洲欧美日韩精品久久久 | 色99久久| 亚洲国产视频直播 | 狠狠狠色丁香婷婷综合久久五月 | 亚洲精品电影在线 | 99精品视频免费观看视频 | 91最新视频 | 福利视频一区二区 | 五月婷婷丁香六月 | 精品久久久久久久 | 亚洲精品88欧美一区二区 | 99热精品国产一区二区在线观看 | 久久成人在线视频 | 久久网页 | 久久网站免费 | 成人污视频在线观看 | 最近最新mv字幕免费观看 | 国产精品18毛片一区二区 | 久久精品国产亚洲精品2020 | 看黄色91| 夜夜骑首页 | 国产亚洲视频中文字幕视频 | 天天干.com | 日本三级久久 | 天天干中文字幕 | 亚洲成人黄色在线观看 | 久久久精品国产一区二区 | 天天操天天操天天操天天操天天操 | 天天干人人干 | av手机版 | 国产在线a视频 | 午夜在线免费视频 | 一级久久久 | 99精品久久精品一区二区 | 美腿丝袜一区二区三区 | 免费看黄在线观看 | 欧美色综合天天久久综合精品 | 国产免费亚洲 | 福利视频精品 | 欧美日韩免费在线视频 | 中文字幕在线观看第一页 | 亚洲精品网址在线观看 | 日韩在线视频不卡 | 精品久久毛片 | 999超碰 | 国产精品久久久一区二区 | 免费精品视频在线观看 | 欧美日韩精| 99精品欧美一区二区蜜桃免费 | 国产精品白浆视频 | 欧美激情精品久久久久久免费 | 国产精品99免费看 | 97碰碰碰| 久久免费视频播放 | 免费观看福利视频 | 日韩免费视频播放 | 亚洲精品日韩一区二区电影 | 久久免费视频3 | 黄色大全免费观看 | 99热最新地址 | 999久久久久久 | 午夜影院一级片 | 亚洲色视频| 欧美日韩高清一区二区 | 在线v| 婷婷丁香色综合狠狠色 | 久久手机看片 | 精品视频 | 日韩中文字幕免费 | 国产91精品看黄网站 | 日韩精品免费一区二区 | 免费a一级 | 波多野结衣一区二区三区中文字幕 | 九九热免费视频在线观看 | 精品国产一区二区三区久久影院 | 国内久久久 | 久久99免费 | 丁香午夜婷婷 | 成人久久18免费网站麻豆 | 日韩va欧美va亚洲va久久 | 日韩av一区二区在线 | 九九视频这里只有精品 | 91精品国产网站 | 中国一 片免费观看 | 一区二区三区 亚洲 | 日本精品视频免费 | 免费看的黄网站 | 久久午夜免费视频 | 久久久久久久99精品免费观看 | 日韩激情av在线 | 国产中文字幕大全 | 激情大尺度视频 | 91视频91色| 欧美大荫蒂xxx | 午夜精品中文字幕 | 激情网色| 久久a视频| 久久免费在线视频 | 欧美在线观看视频一区二区 | 97视频免费在线看 | 久草在线综合网 | 天天激情天天干 | 日本一区二区三区免费看 | 国产一级电影免费观看 | 免费看搞黄视频网站 | 日韩黄视频 | 激情网站网址 | 欧美大片在线观看一区 | av一级一片 | 中文av在线播放 | 91在线在线观看 | 视频 国产区 | 99re热精品视频 | 国内综合精品午夜久久资源 | 天堂av在线网站 | 少妇bbw揉bbb欧美 | 久久久久久久久久久高潮一区二区 | 69国产成人综合久久精品欧美 | 999在线精品| 国产一级在线观看 | 日韩一级片大全 | 国产精品观看视频 | aⅴ精品av导航 | 欧美激情一区不卡 | 国产精品网址在线观看 | 久久久国产精品一区二区三区 | 精品电影一区二区 | 美女精品在线观看 | 久久久久国产精品免费 | 亚洲国产久 | 亚洲精品影院在线观看 | 91麻豆.com | 日本中文字幕网站 | av成人黄色 | 麻豆视频国产在线观看 | 日韩高清在线一区二区三区 | 天天天天天干 | 日韩欧美一区二区三区黑寡妇 | 香蕉精品视频在线观看 | 亚洲jizzjizz日本少妇 | 波多野结衣一区二区三区中文字幕 | 国内99视频 | 亚洲 欧美变态 另类 综合 | 日躁夜躁狠狠躁2001 | 五月天色综合 | aaa日本高清在线播放免费观看 | 午夜婷婷网| 成人av资源网站 | 在线日韩精品视频 | 国产午夜精品一区二区三区在线观看 | av不卡中文字幕 | 久久五月天色综合 | 青青河边草观看完整版高清 | 天天干.com| 精品一区二区免费在线观看 | 狠狠操电影网 | 亚洲精品一区二区三区在线观看 | 欧美a在线看 | 九色精品免费永久在线 | 国产精品伦一区二区三区视频 | 2020天天干夜夜爽 | 中日韩在线 | 亚洲区精品 | 天天操夜夜操 | 在线观看av黄色 | 免费看一级一片 | 精品视频www | 日韩精品一区二区免费 | 国产爽视频 | 国产大片免费久久 | 亚洲国产人午在线一二区 | www.天天综合 | 日韩久久在线 | 欧美一级片在线 | 一级片在线 | 国产一区二区高清不卡 | 中文字幕在线电影 | 中文字幕在线视频一区二区三区 | 国产91精品一区二区麻豆亚洲 | 国产剧在线观看片 | 日韩动漫免费观看高清完整版在线观看 | 色天天天 | 国产中文字幕一区 | 91av99| 国产视 | 香蕉视频在线网站 | 网址你懂的在线观看 | 一区二区三区在线观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 久久激情婷婷 | av电影中文字幕 | 欧美日韩不卡一区 | 奇米777777| 毛片激情永久免费 | 婷婷国产一区二区三区 | 亚洲视频在线观看 | 伊人色综合久久天天 | 粉嫩av一区二区三区免费 | 久久久久久久久久久久久久av | 999日韩| 精品国产诱惑 | 色多多视频在线观看 | 日韩手机在线观看 | 91av播放| 婷婷视频在线播放 | 亚洲女欲精品久久久久久久18 | 在线观看av网站 | 国产精品久久伊人 | 久久狠狠一本精品综合网 | 成人永久免费 | 成人久久| 狠狠干夜夜爱 | 成人动漫视频在线 | 国产精品综合久久久久 | 久久这里只有精品视频首页 | 四虎影视8848dvd | 91九色在线观看视频 | 欧美一区二区三区特黄 | www五月婷婷 | 热久久99这里有精品 | 狠狠操操| 四虎影视成人永久免费观看亚洲欧美 | 国产亚洲高清视频 | 成人av电影在线观看 | 手机在线中文字幕 | 国产人免费人成免费视频 | 国产精品国产三级国产aⅴ入口 | 精品国产免费久久 | 2023国产精品自产拍在线观看 | 久精品视频在线观看 | 91九色视频在线播放 | 一区二区三区免费在线观看视频 | 欧美日韩国产精品一区二区三区 | 特级免费毛片 | 欧美在线你懂的 | 亚洲精品一区二区在线观看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 欧美日韩在线播放 | 超碰99人人| 成人av电影免费在线观看 | 香蕉久久久久久av成人 | 毛片网站在线 | 啪啪免费试看 | 一区二区视频在线观看免费 | 免费视频资源 | 欧美精品生活片 | 日日操夜 | 久久久免费观看视频 | 久久久精品电影 | 国产看片网站 | 久久久国产精品网站 | 久久香蕉国产 | 91福利视频久久久久 | 国产伦理久久 | 国产午夜激情视频 | 国产精品久久99综合免费观看尤物 | 国产福利a | 一区二区三区在线免费播放 | 国产精品色婷婷 | 亚洲人人网 | 1024手机在线看 | 久久伊人热 | 色婷婷免费视频 | 免费又黄又爽的视频 | 中文字幕精品一区久久久久 | 在线看黄色的网站 | 色偷偷男人的天堂av | 色丁香色婷婷 | 黄色亚洲 | 亚洲人片在线观看 | 亚洲黄网址 | 97精品国产97久久久久久免费 | 狠狠操狠狠干天天操 | 久久精品99国产精品日本 | av无限看 | 国产精品精 | 国产精品一区二区吃奶在线观看 | 国产免费影院 | 亚洲理论电影网 | 国产成人精品一区二区三区福利 | 久久久久久久久久免费 | 色综合久久中文字幕综合网 | 亚洲久在线 | 精品福利在线视频 | 国产+日韩欧美 | 久久国产精品色婷婷 | 亚洲日本精品视频 | 欧美日韩在线观看一区二区 | 久99精品| 四虎免费在线观看视频 | 天天干天天操天天操 | 高清免费在线视频 | 精品国产综合区久久久久久 | 美女国内精品自产拍在线播放 | 久久精品中文字幕免费mv | 在线观看色视频 | 欧美成人日韩 | 日本久久久精品视频 | 欧洲精品亚洲精品 | 久草久热 | 日日夜夜狠狠干 | 人人干人人添 | 午夜三级福利 | 国产高清中文字幕 | www.伊人色.com | 91成人区| 国产色秀视频 | 99精品在线视频播放 | 中文字幕专区高清在线观看 | 一级性视频| 精品久久99 | 久久视频一区二区 | 极品久久久久 | 亚洲韩国一区二区三区 | 国产乱对白刺激视频不卡 | 中文乱码视频在线观看 | 国产xxxx做受性欧美88 | 精品一区二区三区久久久 | av看片在线| 免费a网站 | 国产精品1区2区3区在线观看 | 国产伦精品一区二区三区照片91 | 久久久久 免费视频 | 日韩免费视频观看 | zzijzzij日本成熟少妇 | 日韩精品欧美精品 | 日韩精品你懂的 | 中文字幕久久网 | 欧美日韩国产在线观看 | 亚洲高清网站 | 不卡视频在线看 | 国产色在线视频 | 国产成人精品免费在线观看 | 天天干天天插 | 欧美做受69 | 国产二区免费视频 | 午夜精品电影 | 黄色软件网站在线观看 | 中文字幕频道 | 国产一级在线免费观看 | 国产婷婷精品av在线 | 精品免费国产一区二区三区四区 | 欧美与欧洲交xxxx免费观看 | 成年人免费观看国产 | 成人黄色小说网 | 日韩欧美xxx | 片黄色毛片黄色毛片 | 开心激情综合网 | 日韩免费视频观看 | 中文字幕永久在线 | 波多野结衣电影一区二区三区 | 国产一级片在线播放 | 欧美日韩91 | 国产综合视频在线观看 | 四虎在线视频 | 天天干天天干天天干天天干天天干天天干 | 色窝资源| 毛片的网址 | 国产高清av免费在线观看 | 中文字幕亚洲精品在线观看 | 日韩色视频在线观看 | 国产又粗又猛又爽又黄的视频免费 | 日韩av一区二区三区四区 | 99久久毛片| 99久久久国产精品美女 | 久久久久久久久久久高潮一区二区 | 色婷婷狠狠五月综合天色拍 | 亚洲欧洲一区二区在线观看 | 色婷婷久久久 | 亚洲在线视频免费观看 | 亚洲视频观看 | 国产精品日韩久久久久 | 亚洲免费不卡 | 伊人射 | 免费试看一区 | 黄色毛片视频 | 免费黄色av | 五月婷婷导航 | 国产69精品久久99不卡的观看体验 | 麻豆果冻剧传媒在线播放 | 91专区在线观看 | 色婷婷激情网 | 国产一级视屏 | 久久亚洲成人网 | 成人在线观看免费视频 | 黄色1级毛片| 伊人五月在线 | 黄色av电影在线观看 | 99视频| 久久在线精品视频 | 日韩在线无 | 国产精品免费看久久久8精臀av | 亚洲国产欧美在线看片xxoo | 天天干天天摸 | 欧美午夜寂寞影院 | 91精品国产91久久久久福利 | av在线免费播放 | 国产成人区 | 久久精品人人做人人综合老师 | 欧美日韩精品网站 | 色婷婷av国产精品 | 激情综合啪 | 91麻豆文化传媒在线观看 | 日韩激情小视频 | 欧美色综合天天久久综合精品 | 不卡的av片 | 欧美成人aa| 亚洲视频久久久久 | 色综合亚洲精品激情狠狠 | 日韩在线高清免费视频 | 日本激情视频中文字幕 | 亚洲国产影院 | 久精品视频在线 | 久久激情视频 久久 | 在线观看中文字幕第一页 | 国产精品99久久99久久久二8 | 午夜国产福利视频 | 久久福利 | 久久久精品国产免费观看一区二区 | 欧美激情综合五月色丁香小说 | 在线天堂视频 | 麻豆视频免费观看 | 狠狠狠狠狠狠狠干 | 午夜视频不卡 | 99热这里有 | 最近中文字幕高清字幕在线视频 | 在线免费成人 | 成年人网站免费在线观看 | 欧美成人一二区 |