日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

DB2用戶定義函數(shù)實現(xiàn)多種語言的排序(1)

瀏覽:28日期:2023-11-10 18:19:43
當在 DB2 UDB 數(shù)據(jù)庫中存儲多語種數(shù)據(jù)時,Unicode 往往是惟一一種能夠適應(yīng)整個數(shù)據(jù)范圍的編碼。DB2 可以存儲和處理 Unicode 數(shù)據(jù),但是它的排序功能只限于二進制排序和三種文化排序。另外,一個數(shù)據(jù)庫只能有一種排序規(guī)則,這是在創(chuàng)建數(shù)據(jù)庫時決定的。對于需要支持多種語言的用戶和數(shù)據(jù)的數(shù)據(jù)庫,這些排序限制是一個明顯的難題。IBM 創(chuàng)建了一個用于治理 Unicode 數(shù)據(jù)的函數(shù)庫,稱為 ICU(International Components for Unicode)。這個庫為 C 和 Java™ 編程語言提供了一整套操作 Unicode 數(shù)據(jù)的函數(shù)。這個庫是在一種無限制的開放源碼許可證下發(fā)布的,這使它可以在許多應(yīng)用程序中使用。ICU 提供的函數(shù)實現(xiàn)了標準的 Unicode Collation Algorithm(UCA)以及許多文化調(diào)整功能。很輕易將適當?shù)?ICU 函數(shù)組合成一個 UDF(用戶定義函數(shù)),從而讓 DB2 可以充分利用 ICU 的排序支持。(隨便說一句,DB2 for Linux, UNIX, and Windows 就是使用 ICU 庫來實現(xiàn)在 Unicode 數(shù)據(jù)上支持的三種文化排序。)本文主要關(guān)注 DB2 V8 for Linux, UNIX, and Windows,但是這個 UDF 示例也可以用在即將發(fā)布的 Viper 上。這個 UDF 也應(yīng)該能夠用在 DB2 V7 FP3 或更高版本上,但是這沒有經(jīng)過測試。另外,這個 UDF 可能能夠用在 DB2 for zSeries® 和 iSeries™ 上,但是這沒有經(jīng)過測試,本文也不討論這些平臺。安裝示例數(shù)據(jù)庫本文假設(shè)要使用的數(shù)據(jù)庫稱為 SAMPLE,但是可以使用任何數(shù)據(jù)庫。無論使用哪個數(shù)據(jù)庫,它必須是 Unicode 數(shù)據(jù)庫。為了判定一個數(shù)據(jù)庫是否是 Unicode 數(shù)據(jù)庫,執(zhí)行以下命令:db2 get database configuration for sample接近配置信息頂部的 “Database code page 條目必須是 “utf-8。假如沒有 Unicode 數(shù)據(jù)庫可用,那么可以用以下命令創(chuàng)建一個: 123456789下一頁 db2 create database sample using codeset utf-8 territory ca本文提供了針對 32 位 Intel 和 AMD 平臺的二進制代碼。下面介紹在 Linux 和 Windows 上如何安裝預(yù)構(gòu)建的二進制代碼。對于所有其他平臺,編譯 ICU 和 UDF 中提供了說明。針對 Linux(32 位 Intel 或 AMD)預(yù)構(gòu)建的二進制代碼要在 Linux 上安裝預(yù)構(gòu)建的二進制代碼:從 “下載 中下載文件 sortkey-linux-x86.zip 并將它解壓到一個臨時目錄中。將以下文件:sortkeylibicui18n.so.34libicuuc.so.34libicudata.so.34復(fù)制到 sqllib/function 中。連接到數(shù)據(jù)庫,并運行 DDL 腳本來對這個函數(shù)進行編目:db2 connect to sampledb2 -tvf createfn.db2注:這個 Linux 預(yù)構(gòu)建二進制代碼是在 Red Hat Linux 7.2 上用 gcc 2.96 編譯的。針對 Windows(32 位)預(yù)構(gòu)建的二進制代碼要在 Windows 上安裝預(yù)構(gòu)建的二進制代碼:從 “下載 中下載文件 sortkey-windows-32.zip 并將它解壓到一個臨時目錄中。將以下文件:sortkey.dllicuin34.dllicuuc34.dllicudt34.dll復(fù)制到 sqllib/function 中。使用一個 DB2 命令窗口連接到數(shù)據(jù)庫,并運行 DDL 腳本來對這個函數(shù)進行編目:db2 connect to sampledb2 -tvf createfn.db2編譯 ICU 和 UDF要編譯 ICU 和 UDF:下載并安裝 ICU 庫。參見 “參考資料 中 ICU 站點的鏈接,在這里可以下載二進制代碼或源代碼,以及學(xué)習(xí)如何編譯和安裝這個庫。假如需要的話,將包含 ICU 可執(zhí)行文件的目錄添加到 PATH 環(huán)境變量中。在 Windows 中,還需要更新 LIB 和 INCLUDE 環(huán)境變量。LIB 變量應(yīng)該引用 iculib 目錄,INCLUDE 應(yīng)該引用 icuinclude 目錄。 上一頁123456789下一頁 從 “下載 中下載文件 sortkey-source.zip 并將它解壓到一個臨時目錄中將文件 sqllib/samples/c/bldrtn(在 Windows 上是 sqllibsamplescldrtn.bat)復(fù)制到臨時目錄并編輯復(fù)制的文件。對于編譯和鏈接步驟,需要添加關(guān)于 ICU 的信息。在 Linux 或 UNIX 上,定義變量 ICU_C_FLAGS 和 ICU_L_FLAGS,并將它們添加到編譯和鏈接命令中。這些變量應(yīng)該在命令前面定義,并在編譯器或鏈接器可執(zhí)行文件名后面直接使用。清單 1 顯示 Linux bldrtn 文件中的相關(guān)部分。修改之處以粗體顯示。清單 1. 修改的 Linux bldrtn 文件# If an embedded SQL program, precompile and bind it.if [ -f $1".sqc" ]then./embprep $1 $2fi# ICU optionsICU_C_FLAGS="`icu-config --cppflags --cxxflags`"ICU_L_FLAGS="`icu-config --ldflags`"# Compile the program.$CC $ICU_C_FLAGS $EXTRA_C_FLAGS-I$DB2PATH/include -c $1.c -D_REENTRANT# Link the program and create a shared library$CC $ICU_L_FLAGS $LINK_FLAGS -o $1 $1.o $EXTRA_LFLAG -L$DB2PATH/$LIB -ldb2-lpthread在 Windows 上,必須將 ICU 庫添加到鏈接命令中。清單 2 顯示 Windows bldrtn.bat 文件中的相關(guān)部分。修改之處以粗體顯示。清單 2. 修改的 Windows bldrtn.bat 文件:link_steprem Link the program.link -debug -out:%1.dll -dll %1.obj db2api.lib icudt.lib icuuc.libicuin.lib -def:%1.def 上一頁123456789下一頁 運行 bldrtn 腳本來編譯這個 UDF: bldrtn sortkey將 sortkey(在 Windows 上是 sortkey.dll)文件復(fù)制到 sqllib/function 中。連接到數(shù)據(jù)庫,并運行 DDL 腳本來對這個函數(shù)進行編目:db2 connect to sampledb2 -tvf createfn.db2注重,假如以這種方式編譯這個 UDF,那么在運行它的任何機器上必須完整地安裝 ICU。使用 SORTKEY UDF語法>>--SORTKEY--(--string-expression--,--collation-name--)--><這個 UDF 的模式是 ICU。假如模式 ICU 在 SQL PATH 中,那么就不必對這個 UDF 進行顯式限定引用。SORTKEY UDF 返回一個 VARCHAR(1200) FOR BIT DATA 字符串,代表在指定的 collation-name 中 string-expression 的排序鍵。假如排序鍵的長度超過 1200 字節(jié),那么排序鍵被截斷并返回一個警告(SQLSTATE 01HKY)。SORTKEY 的結(jié)果是可空的。假如任何參數(shù)是 null,那么結(jié)果就是 NULL。可以對兩個字符串的 SORTKEY 結(jié)果進行二進制比較,從而判定它們在指定的 collation-name 中的次序。為了讓比較有意義,使用的 SORTKEY 結(jié)果必須來自相同的 collation-name。string-expression這個表達式返回一個 CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC 字符串,UDF 要判定這個字符串的排序鍵。string-expression 的最大長度是 100 個字符(SQLSTATE 22001)。假如 string-expression 是 CHAR 或 VARCHAR,這個表達式必須不是 FOR BIT DATA (SQLSTATE 42846)。假如 string-expression 是空字符串,那么結(jié)果是一個具有非零長度的有效排序鍵。collation-name這個字符串表達式指定在判定排序鍵時使用的排序規(guī)則。collation-name 的值不是大小寫敏感的,而且必須是空字符串(對應(yīng)于默認的 UCA 排序)或者 “排序規(guī)則名 中定義的一個名稱。(SQLSTATE SKCOL)。 上一頁123456789下一頁 必須從 Unicode 數(shù)據(jù)庫調(diào)用 SORTKEY,否則返回一個錯誤。(SQLSTATE SKUTF)。示例example.db2 中的 Unicode 字符example.db2 文件包含幾個用 UTF-8 進行編碼的字符。理想情況下,應(yīng)該從一個 Unicode shell 調(diào)用下面的示例。假如不是從 Unicode shell 調(diào)用示例,那么表 SORTKEY_GERMAN1 和 SORTKEY_GERMAN2 會包含不正確的數(shù)據(jù),示例 4 會失敗。為了答應(yīng)從非 Unicode shell 調(diào)用示例,可以將注冊表變量 DB2CODEPAGE 設(shè)置為 1208。這會使 DB2 客戶機以 UTF-8 格式處理數(shù)據(jù)。加重音的字符無法正確顯示,但是示例可以正確地運行。為了設(shè)置 DB2CODEPAGE 并運行示例,執(zhí)行以下命令:db2 terminatedb2set DB2CODEPAGE=1208db2 connect to sampledb2 -tf example.db2當 DB2CODEPAGE 設(shè)置為 1208 時,它對其他應(yīng)用程序可能會產(chǎn)生某些意料之外的效果。在運行示例之后,可以用以下命令恢復(fù) DB2CODEPAGE:db2 terminatedb2set DB2CODEPAGE=這些示例使用的表、數(shù)據(jù)和查詢可以在文件 example.db2 中找到。當連接數(shù)據(jù)庫時,可以用以下命令執(zhí)行它:db2 -tf example.db2ORDER BY不同的語言用不同的規(guī)則來決定字母的次序。例如,英語從字母 A 排序到 Z,沒有例外,如第一個示例所示。查詢 1. 用英語排序規(guī)則進行排序SELECT NAME FROM SORTKEY_NAMESORDER BY ICU.SORTKEY(NAME, 'LEN')結(jié)果 1. 用英語排序規(guī)則進行排序碼NAME--------------------AliceCelineCharlesCindyDonHillaryIanSam 上一頁123456789下一頁 但是在斯洛伐克語中,兩個字符的組合 CH 排在字母 H 和 I 之間。查詢 2. 用斯洛伐克語排序規(guī)則進行排序SELECT NAME FROM SORTKEY_NAMESORDER BY ICU.SORTKEY(NAME, 'LSK')結(jié)果 2. 用斯洛伐克語排序規(guī)則進行排序NAME--------------------AliceCelineCindyDonHillaryCharlesIanSam注重,Charles 現(xiàn)在位于 Hillary 和 Ian 之間。比較一些語言對于同一個字符有不同的表示方法。例如,在德語中,字母 ä 等于 ae,ö 等于 oe,ü 等于 ue。在 SQL 中進行比較時,并不考慮這些替代表示方法。假設(shè)有兩個德國城市名列表: NuernbergNürnbergLuebeckLuebeckKölnKoeln當使用普通的 SQL 聯(lián)結(jié)這兩個列表時,不考慮替代的字符表示方法。查詢 3. 未規(guī)范化的聯(lián)結(jié)SELECT G1.CITY AS CITY1, G2.CITY AS CITY2FROM SORTKEY_GERMAN1 AS G1, SORTKEY_GERMAN2 AS G2WHERE G1.CITY = G2.CITYORDER BY G1.CITY結(jié)果 3. 未規(guī)范化的聯(lián)結(jié)CITY1CITY2-------------------- --------------------LuebeckLuebeck注重,在這兩個表中只有拼寫完全相同的城市名才被認為是相等的。但是,SORTKEY UDF 可以處理字符的不同表示方法。在這種情況下,我們使用德語排序規(guī)則的 “phonebook 變體并將強度設(shè)置為 1,從而忽略重音差異。(排序規(guī)則選項的完整列表見 “排序規(guī)則名。) 上一頁123456789下一頁 查詢 4. 規(guī)范化的聯(lián)結(jié)SELECT G1.CITY AS CITY1, G2.CITY AS CITY2FROM SORTKEY_GERMAN1 AS G1, SORTKEY_GERMAN2 AS G2WHERE ICU.SORTKEY(G1.CITY, 'LDE_KPHONEBOOK_S1') =ICU.SORTKEY(G2.CITY, 'LDE_KPHONEBOOK_S1')ORDER BY G1.CITY結(jié)果 4. 規(guī)范化的聯(lián)結(jié)CITY1CITY2-------------------- --------------------K&ouml;lnKoelnLuebeckLuebeckNuernbergNürnberg通過使用排序鍵(而不是值本身)進行比較,適當?shù)靥幚砹嗣Q中的次要差異。通過選擇適當?shù)呐判蛞?guī)則,可以根據(jù)語言進行比較、忽略大小寫和重音差異或者完全忽略某些字符。在 ORDER BY 子句中,修改一個排序規(guī)則的強度來忽略字符屬性可能會導(dǎo)致不確定的查詢結(jié)果次序。例如, ORDER BY ICU.SORTKEY(COLUMN, 'S1') (這里使用的排序規(guī)則會忽略大小寫和重音)會正確地排列 A < B < C。但是,這個排序規(guī)則不區(qū)分 “apple、“Apple 和 “APPLE,可能以任意次序返回這些單詞。SORTKEY 產(chǎn)生的值依靠于使用的排序規(guī)則。因此,當在謂詞中使用 SORTKEY 時,比較的兩邊要使用完全相同的排序規(guī)則。性能考慮因素當在查詢中引入 UDF 時,它會損害查詢的性能。對數(shù)據(jù)庫和查詢的設(shè)計進行仔細地分析,可以將性能影響最小化。要考慮的一些因素是:使用固定的排序規(guī)則名盡可能少使用 SORTKEY使用生成的列使用固定的排序規(guī)則名預(yù)備要使用的排序規(guī)則是一種開銷很大的操作。因此,在查詢執(zhí)行時不要改變排序規(guī)則名。例如,考慮以下表和查詢: 上一頁123456789下一頁 NAMES: NAMELANGUAGE------------BobLENMarcLFRSerge LDESELECT NAME FROM NAMESWHERE ICU.SORTKEY(NAME, LANGUAGE) = ICU.SORTKEY(:hv, LANGUAGE)在這個例子中,對于每一行都要預(yù)備一個新的排序規(guī)則。這樣做的效率非常低。假如 SORTKEY 的第二個參數(shù)替換為一個字面字符串或主機變量,那么查詢的性能會好得多。注重,可以在一個查詢中混合使用不同的排序規(guī)則,只要每個排序規(guī)則在不同的 SORTKEY 實例中。以下查詢的性能會好得多:SELECT NAME FROM NAMESWHERE ICU.SORTKEY(NAME, 'LFR') = ICU.SORTKEY(:hv, 'LFR')盡可能少使用 SORTKEY假如知道數(shù)據(jù)是一致的,那么就不需要對每個操作都使用 SORTKEY。例如,考慮前面的 查詢 3 和 查詢 4。假如數(shù)據(jù)是以一致的方式輸入的,比如總是使用 ä、ö 和 ü,或者已經(jīng)對數(shù)據(jù)進行了清理,將所有 ae、oe 和 ue 替換為 ä、ö 和 ü,那么查詢 3 和查詢 4 會返回同樣的結(jié)果,而查詢 3 運行得快的多。假如數(shù)據(jù)是一致的,就不經(jīng)常需要 SORTKEY。盡可能使用標準的 SQL 比較操作符,并在最后的 ORDER BY 中使用 SORTKEY。使用生成的列假如數(shù)據(jù)庫經(jīng)常使用很少幾個排序規(guī)則,那么可以考慮使用生成的列預(yù)先計算 SORTKEY 的結(jié)果,并將這些結(jié)果存儲在數(shù)據(jù)庫中。例如,假設(shè)一個數(shù)據(jù)庫通常只需要法語和德語排序規(guī)則。在這種情況下,根據(jù)表的總規(guī)模,可以考慮創(chuàng)建生成的列來保存 SORTKEY 的結(jié)果。例如:清單 3. 創(chuàng)建生成的列來保存 SORTKEY 的結(jié)果CREATE TABLE NAMES(NAME VARCHAR(50),NAME_FR_KEY VARCHAR(1200) GENERATED ALWAYS AS (ICU.SORTKEY(NAME, 'LFR')),NAME_DE_KEY VARCHAR(1200) GENERATED ALWAYS AS (ICU.SORTKEY(NAME, 'LDE')))SELECT NAME FROM NAMESORDER BY ICU.SORTKEY(NAME, 'LFR') 上一頁123456789下一頁 當 DB2 查詢編譯器對這個查詢進行運算時,它會意識到 ICU.SORTKEY(NAME, 'LFR') 的值已經(jīng)計算出來了,它會使用 NAME_FR_KEY 列來替代這個值。但是,假如查詢使用 ICU.SORTKEY(NAME, 'LES') (西班牙語排序規(guī)則),那么 SORTKEY 函數(shù)必須作為查詢的一部分執(zhí)行。不幸的是,將生成的列記錄為 VARCHAR(1200) 值會占用表中的大量空間。好在,還有一些辦法。一個辦法是修改 createfn.db2,讓 SORTKEY 產(chǎn)生長度更短的結(jié)果類型。假如這樣做了,那么應(yīng)該減小 sortkey.c 中的常量 MAX_RESULT,還應(yīng)該重新編譯這個 UDF。另一個辦法是將 SORTKEY 的結(jié)果轉(zhuǎn)換為更短的 VARCHAR 值。但是,對于使用生成的列的優(yōu)化器,必須在每個引用中使用同樣的轉(zhuǎn)換。這種辦法如下所示:清單 4. 在每個引用中使用同樣的轉(zhuǎn)換CREATE TABLE NAMES(NAME VARCHAR(50),NAME_FR_KEY VARCHAR(600)GENERATED ALWAYS AS (CAST(ICU.SORTKEY(NAME, 'LFR')AS VARCHAR(600))),NAME_DE_KEY VARCHAR(600)GENERATED ALWAYS AS (CAST(ICU.SORTKEY(NAME, 'LDE')AS VARCHAR(600))))SELECT NAME FROM NAMESORDER BY CAST(ICU.SORTKEY(NAME, 'LFR') AS VARCHAR(600))總是需要指定轉(zhuǎn)換,這使這種辦法不夠理想。可以使用下面的源函數(shù)將轉(zhuǎn)換隱藏起來:清單 5. 使用源函數(shù)將轉(zhuǎn)換隱藏起來CREATE FUNCTION MY_SORTKEY(VARCHAR(50), VARCHAR(50))RETURNS VARCHAR(600) FOR BIT DATASOURCE ICU.SORTKEYCREATE TABLE NAMES(NAME VARCHAR(50),NAME_FR_KEY VARCHAR(600) GENERATED ALWAYS AS (MY_SORTKEY(NAME, 'LFR')),NAME_DE_KEY VARCHAR(600) GENERATED ALWAYS AS (MY_SORTKEY(NAME, 'LDE')))SELECT NAME FROM NAMESORDER BY MY_SORTKEY(NAME, 'LFR')不管使用哪種方法,重要的考慮因素都是生成的列的長度。SORTKEY 結(jié)果的長度可能比原來的字符串長。簡單的規(guī)則是,對于輸入字符串中的每個字符,在輸出字符串中答應(yīng)有 12 字節(jié)。(對于某些不常見的排序規(guī)則和輸入值組合,這個空間甚至也可能不夠。)但是,許多排序規(guī)則會產(chǎn)生比這短得多的排序鍵,因此在決定生成的列的大小時,對要使用的排序規(guī)則和數(shù)據(jù)進行一些實驗是有幫助的。 上一頁123456789
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
影音先锋国产精品| 日本午夜精品| 亚洲乱码视频| 国产精品99一区二区| 国产精品密蕾丝视频下载| 午夜日韩福利| 91视频精品| 国产激情欧美| 日韩av一级片| 欧美一区精品| 国产精品视频一区二区三区四蜜臂| 久久国产电影| 久久精品国产www456c0m| 91综合网人人| 97精品国产一区二区三区| 国产精品一二| 日韩不卡免费视频| 国产欧美日韩综合一区在线播放| 日本不卡高清| 亚洲精品中文字幕99999| 视频一区国产视频| 亚洲精品中文字幕99999| 天堂久久一区| 美女尤物国产一区| 日韩精品诱惑一区?区三区| 国产乱码午夜在线视频| 久久av网站| 久久久噜噜噜| 亚洲久草在线| 国产精品1区在线| 日韩成人亚洲| 性色一区二区| 国产精品一二| 亚洲高清激情| 日韩高清成人在线| 精品日韩一区| 91成人精品视频| 日本不卡视频在线| 精品日韩一区| 日韩在线a电影| 久久精品一区二区三区中文字幕| 91国内精品| 麻豆精品国产91久久久久久| 成人日韩在线| 在线亚洲免费| 久久免费影院| 美女国产一区| 国产一区二区三区不卡av| 蜜臀av国产精品久久久久| 精品国产第一福利网站| 国产精品最新| 日韩精品导航| 亚洲综合电影一区二区三区| 免费在线欧美黄色| 国产三级一区| 国产欧美一区二区三区精品观看| 老牛影视精品| 国产精品不卡| 麻豆精品99| 国产精品色婷婷在线观看| 日本va欧美va瓶| 亚洲一二av| 丝袜av一区| 樱桃视频成人在线观看| 日本久久精品| 电影亚洲精品噜噜在线观看| 国产激情一区| 国产欧美久久一区二区三区| 日韩成人午夜精品| 欧美偷窥清纯综合图区| 亚洲丝袜美腿一区| 久久免费大视频| 日韩天堂在线| 婷婷成人在线| 丝袜美腿亚洲色图| 日韩国产欧美视频| 欧美激情麻豆| 91精品观看| 美日韩精品视频| 免费精品国产| 日韩午夜黄色| 国产精品毛片一区二区三区| 宅男噜噜噜66国产日韩在线观看| 激情欧美一区二区三区| 欧美精品一线| 蜜臀久久久99精品久久久久久| 亚洲福利久久| 免费在线观看一区二区三区| 免费精品视频| 欧美一级一区| 欧美xxxx中国| 91精品成人| 综合激情网...| 亚洲精品影院在线观看| 日本三级亚洲精品| 国产一区二区三区不卡视频网站 | 亚洲黑丝一区二区| 欧美日韩高清| 免费在线观看日韩欧美| 日韩精品视频一区二区三区| 国产精品一区二区精品视频观看 | 丝袜诱惑制服诱惑色一区在线观看 | av不卡在线看| 日本一区二区三区视频在线看| 久久国产人妖系列| 国产精品玖玖玖在线资源| 日韩欧美精品| 一区二区国产在线| 国产欧美一区二区三区精品酒店 | 亚洲免费网址| 欧美国产另类| 欧美午夜精彩| 欧美极品中文字幕| 亚洲欧美视频| 日韩啪啪电影网| 国产欧美一区二区精品久久久 | 欧美日韩精品免费观看视欧美高清免费大片 | 在线亚洲欧美| 精品精品99| 亚洲久久在线| 麻豆网站免费在线观看| 亚洲色图国产| 91成人精品| 日本一区二区高清不卡| 日本成人中文字幕在线视频| 久久中文视频| 日韩毛片视频| 国产99在线| 你懂的亚洲视频| 国产精品一页| 欧美一区91| 日韩精品欧美精品| 蜜桃伊人久久| 一区久久精品| 亚洲午夜黄色| 日韩欧美一区二区三区免费看| 国产精品地址| 日本在线一区二区三区| 蜜臀va亚洲va欧美va天堂| 91精品韩国| 黄毛片在线观看| 五月激情久久| 日韩精品一区二区三区免费观看| 国产一区福利| 国产精品99一区二区三区| 麻豆一区二区三| 久草精品视频| 国产成人精选| 日韩在线视频精品| sm久久捆绑调教精品一区| 久久99性xxx老妇胖精品| 国产精品nxnn| 97精品国产一区二区三区| 亚洲四虎影院| 国产精品婷婷| 五月亚洲婷婷 | 亚洲播播91| 成人欧美一区二区三区的电影| 精品久久久久中文字幕小说| 久久国产亚洲精品| 亚洲精品乱码久久久久久蜜桃麻豆 | 日韩av一区二区三区| 久久亚洲黄色| 国产精品人人爽人人做我的可爱| 综合欧美精品| 国产精品国产三级国产在线观看| 欧美日韩国产在线观看网站 | 热久久久久久久| 日韩av一区二区在线影视| 久久激情五月婷婷| 色婷婷色综合| 国产亚洲精品自拍| 日本精品在线播放| 久久激情综合网| 一区三区视频| 久久精品99国产精品日本| 亚洲免费播放| 国产日韩亚洲| 91精品在线观看国产| 久久久天天操| 亚洲伊人精品酒店| 国产一区二区三区不卡视频网站 | 欧美一区成人| 超碰在线99| 亚洲一区二区三区四区电影| 久久精品天堂| 午夜久久久久| 色婷婷久久久| 少妇精品久久久一区二区三区| 天使萌一区二区三区免费观看| 国产精品毛片久久| 国产精品一二| 国产成人久久| 精品视频黄色| 久久香蕉精品香蕉| 国产一区观看| 激情黄产视频在线免费观看| 日韩一区中文| 国产情侣久久| 日本精品在线中文字幕|