From e3847e89be4395002bdcaabdf642f3e1812c060a Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 11:05:13 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E8=A7=A3?= =?UTF-8?q?=E5=AF=86=E7=A4=BA=E4=BE=8B=E7=9A=84=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wasm/examples/encrypt_decrypt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wasm/examples/encrypt_decrypt/Cargo.toml b/wasm/examples/encrypt_decrypt/Cargo.toml index 68cc424..37f5500 100644 --- a/wasm/examples/encrypt_decrypt/Cargo.toml +++ b/wasm/examples/encrypt_decrypt/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -opengauss_bindgen = { version = "0", path = "../../bindgen" } +opengauss_bindgen = "0.1.0" magic-crypt = "3.1" [lib] -- Gitee From ab6d82b99db61751a9d5932de98f416e6603801c Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 14:26:27 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=9B=E5=BB=BAODD=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=92=8C=E6=BC=94=E7=A4=BA=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/encrypt_decrypt/1_compile_to_wasm | 10 ++++++++++ odd/encrypt_decrypt/2_create_extension | 1 + odd/encrypt_decrypt/3_load_wasm_func | 1 + odd/encrypt_decrypt/4_create_user_table | 5 +++++ odd/encrypt_decrypt/5_init_secret_key | 2 ++ odd/encrypt_decrypt/6_create_trigger_func | 8 ++++++++ odd/encrypt_decrypt/7_create_trigger | 1 + odd/encrypt_decrypt/8_insert_user_data | 11 +++++++++++ odd/encrypt_decrypt/9_check_result | 1 + odd/encrypt_decrypt/Cargo.toml | 13 +++++++++++++ odd/encrypt_decrypt/src/lib.rs | 15 +++++++++++++++ odd/fib/1_compile_to_wasm | 9 +++++++++ odd/fib/2_create_sql_func | 20 ++++++++++++++++++++ odd/fib/3_load_wasm_func | 1 + odd/fib/Cargo.toml | 12 ++++++++++++ odd/fib/src/lib.rs | 20 ++++++++++++++++++++ wasm/examples/encrypt_decrypt/README | 7 ++++--- 17 files changed, 134 insertions(+), 3 deletions(-) create mode 100755 odd/encrypt_decrypt/1_compile_to_wasm create mode 100644 odd/encrypt_decrypt/2_create_extension create mode 100644 odd/encrypt_decrypt/3_load_wasm_func create mode 100644 odd/encrypt_decrypt/4_create_user_table create mode 100644 odd/encrypt_decrypt/5_init_secret_key create mode 100644 odd/encrypt_decrypt/6_create_trigger_func create mode 100644 odd/encrypt_decrypt/7_create_trigger create mode 100644 odd/encrypt_decrypt/8_insert_user_data create mode 100644 odd/encrypt_decrypt/9_check_result create mode 100644 odd/encrypt_decrypt/Cargo.toml create mode 100644 odd/encrypt_decrypt/src/lib.rs create mode 100755 odd/fib/1_compile_to_wasm create mode 100644 odd/fib/2_create_sql_func create mode 100644 odd/fib/3_load_wasm_func create mode 100644 odd/fib/Cargo.toml create mode 100644 odd/fib/src/lib.rs diff --git a/odd/encrypt_decrypt/1_compile_to_wasm b/odd/encrypt_decrypt/1_compile_to_wasm new file mode 100755 index 0000000..1aba075 --- /dev/null +++ b/odd/encrypt_decrypt/1_compile_to_wasm @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -e + +echo "cargo build --release --target wasm32-unknown-unknown" +cargo build --release --target wasm32-unknown-unknown + +echo "wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm" +wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm + diff --git a/odd/encrypt_decrypt/2_create_extension b/odd/encrypt_decrypt/2_create_extension new file mode 100644 index 0000000..a548835 --- /dev/null +++ b/odd/encrypt_decrypt/2_create_extension @@ -0,0 +1 @@ +CREATE EXTENSION wasm_executor; diff --git a/odd/encrypt_decrypt/3_load_wasm_func b/odd/encrypt_decrypt/3_load_wasm_func new file mode 100644 index 0000000..875395f --- /dev/null +++ b/odd/encrypt_decrypt/3_load_wasm_func @@ -0,0 +1 @@ +SELECT wasm_new_instance('/home/opengauss/odd/encrypt_decrypt/encrypt_decrypt.wasm', 'gs'); diff --git a/odd/encrypt_decrypt/4_create_user_table b/odd/encrypt_decrypt/4_create_user_table new file mode 100644 index 0000000..d262edf --- /dev/null +++ b/odd/encrypt_decrypt/4_create_user_table @@ -0,0 +1,5 @@ +CREATE TABLE users ( + username TEXT PRIMARY KEY, + email TEXT, + passwd TEXT +); diff --git a/odd/encrypt_decrypt/5_init_secret_key b/odd/encrypt_decrypt/5_init_secret_key new file mode 100644 index 0000000..cf9bdea --- /dev/null +++ b/odd/encrypt_decrypt/5_init_secret_key @@ -0,0 +1,2 @@ +CREATE TABLE secrets(secret text); +INSERT INTO secrets VALUES ('s3cretk3y'); diff --git a/odd/encrypt_decrypt/6_create_trigger_func b/odd/encrypt_decrypt/6_create_trigger_func new file mode 100644 index 0000000..69bc2c4 --- /dev/null +++ b/odd/encrypt_decrypt/6_create_trigger_func @@ -0,0 +1,8 @@ +CREATE OR REPLACE FUNCTION encrypt_password() RETURNS TRIGGER AS +$$ + DECLARE + BEGIN + UPDATE users SET passwd = gs_encrypt(NEW.passwd, (SELECT secret FROM secrets LIMIT 1)) WHERE username = NEW.username; + RETURN NEW; + END +$$LANGUAGE PLPGSQL; diff --git a/odd/encrypt_decrypt/7_create_trigger b/odd/encrypt_decrypt/7_create_trigger new file mode 100644 index 0000000..0be0972 --- /dev/null +++ b/odd/encrypt_decrypt/7_create_trigger @@ -0,0 +1 @@ +CREATE TRIGGER encrypt_passwd_trigger AFTER INSERT ON users FOR EACH ROW EXECUTE PROCEDURE encrypt_password(); diff --git a/odd/encrypt_decrypt/8_insert_user_data b/odd/encrypt_decrypt/8_insert_user_data new file mode 100644 index 0000000..05be3b9 --- /dev/null +++ b/odd/encrypt_decrypt/8_insert_user_data @@ -0,0 +1,11 @@ +INSERT INTO users VALUES + ('nel', 'nel@xx.com', 'nelson_passwd'); +INSERT INTO users VALUES + ('mic', 'mic@xx.com', 'mickle_passwd'); +INSERT INTO users VALUES + ('jay', 'jay@xx.com', 'jackson_passwd'); +INSERT INTO users VALUES + ('lily', 'lily@xx.com', 'lily_passwd'); +INSERT INTO users VALUES + ('anna', 'anna@xx.com', 'anna_passwd'); + diff --git a/odd/encrypt_decrypt/9_check_result b/odd/encrypt_decrypt/9_check_result new file mode 100644 index 0000000..da2c923 --- /dev/null +++ b/odd/encrypt_decrypt/9_check_result @@ -0,0 +1 @@ +SELECT username, passwd, gs_decrypt(passwd, (SELECT secret FROM secrets LIMIT 1)) AS decrypted FROM users; diff --git a/odd/encrypt_decrypt/Cargo.toml b/odd/encrypt_decrypt/Cargo.toml new file mode 100644 index 0000000..37f5500 --- /dev/null +++ b/odd/encrypt_decrypt/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "opengauss_encrypt_decrypt" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +opengauss_bindgen = "0.1.0" +magic-crypt = "3.1" + +[lib] +crate-type = ["cdylib"] diff --git a/odd/encrypt_decrypt/src/lib.rs b/odd/encrypt_decrypt/src/lib.rs new file mode 100644 index 0000000..847e89a --- /dev/null +++ b/odd/encrypt_decrypt/src/lib.rs @@ -0,0 +1,15 @@ +use opengauss_bindgen::*; +use magic_crypt::{new_magic_crypt, MagicCryptTrait}; + +#[opengauss_bindgen::opengauss_bindgen] +pub fn encrypt(data: String, key: String) -> String { + let mc = new_magic_crypt!(key, 256); + mc.encrypt_str_to_base64(data) +} + +#[opengauss_bindgen::opengauss_bindgen] +pub fn decrypt(data: String, key: String) -> String { + let mc = new_magic_crypt!(key, 256); + mc.decrypt_base64_to_string(data) + .unwrap_or("[ACCESS DENIED]".to_owned()) +} diff --git a/odd/fib/1_compile_to_wasm b/odd/fib/1_compile_to_wasm new file mode 100755 index 0000000..97e2c55 --- /dev/null +++ b/odd/fib/1_compile_to_wasm @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -e + +echo "cargo build --release --target wasm32-unknown-unknown" +cargo build --release --target wasm32-unknown-unknown + +echo "wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm" +wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm diff --git a/odd/fib/2_create_sql_func b/odd/fib/2_create_sql_func new file mode 100644 index 0000000..dcdef58 --- /dev/null +++ b/odd/fib/2_create_sql_func @@ -0,0 +1,20 @@ +CREATE OR REPLACE FUNCTION sql_fib (n integer) RETURNS decimal AS $$ +DECLARE + counter bigint := 1; + i decimal := 0; + j decimal := 1; +BEGIN + IF (n <= 1) THEN + RETURN n; + END IF; + + WHILE counter <= n LOOP + counter := counter + 1; + SELECT j, i + j INTO i, j; + END LOOP; + + RETURN i; +END; +$$ LANGUAGE plpgsql; + + diff --git a/odd/fib/3_load_wasm_func b/odd/fib/3_load_wasm_func new file mode 100644 index 0000000..a967901 --- /dev/null +++ b/odd/fib/3_load_wasm_func @@ -0,0 +1 @@ +SELECT wasm_new_instance('/home/opengauss/odd/fib/fib.wasm', 'gs'); diff --git a/odd/fib/Cargo.toml b/odd/fib/Cargo.toml new file mode 100644 index 0000000..a3bfce9 --- /dev/null +++ b/odd/fib/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "fib" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +opengauss_bindgen = "0.1.0" + +[lib] +crate-type = ["cdylib"] diff --git a/odd/fib/src/lib.rs b/odd/fib/src/lib.rs new file mode 100644 index 0000000..821e520 --- /dev/null +++ b/odd/fib/src/lib.rs @@ -0,0 +1,20 @@ +use opengauss_bindgen::*; + +#[opengauss_bindgen::opengauss_bindgen] +fn fib(n: u64) -> u64 { + if n <= 1 { + n + } else { + let mut accumulator = 0; + let mut last = 0; + let mut current = 1; + + for _i in 1..n { + accumulator = last + current; + last = current; + current = accumulator; + } + + accumulator + } +} diff --git a/wasm/examples/encrypt_decrypt/README b/wasm/examples/encrypt_decrypt/README index d72c98d..a962c3f 100644 --- a/wasm/examples/encrypt_decrypt/README +++ b/wasm/examples/encrypt_decrypt/README @@ -1,11 +1,12 @@ + CREATE EXTENSION wasm_executor; SELECT wasm_new_instance('/home/opengauss/encrypt_decrypt.wasm', 'gs'); CREATE TABLE users ( -username TEXT PRIMARY KEY, -email TEXT, -passwd TEXT + username TEXT PRIMARY KEY, + email TEXT, + passwd TEXT ); CREATE TABLE secrets(secret text); -- Gitee From 021e49fb0605cbac59c8ce25f3b58f5d0c1ab46d Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 14:42:25 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=87=BD=E6=95=B0=E7=9A=84=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/encrypt_decrypt/{9_check_result => 10_check_result} | 0 odd/encrypt_decrypt/4_show_exported_func | 1 + odd/encrypt_decrypt/{4_create_user_table => 5_create_user_table} | 0 odd/encrypt_decrypt/{5_init_secret_key => 6_init_secret_key} | 0 .../{6_create_trigger_func => 7_create_trigger_func} | 0 odd/encrypt_decrypt/{7_create_trigger => 8_create_trigger} | 0 odd/encrypt_decrypt/{8_insert_user_data => 9_insert_user_data} | 0 odd/fib/4_show_exported_func | 1 + 8 files changed, 2 insertions(+) rename odd/encrypt_decrypt/{9_check_result => 10_check_result} (100%) create mode 100644 odd/encrypt_decrypt/4_show_exported_func rename odd/encrypt_decrypt/{4_create_user_table => 5_create_user_table} (100%) rename odd/encrypt_decrypt/{5_init_secret_key => 6_init_secret_key} (100%) rename odd/encrypt_decrypt/{6_create_trigger_func => 7_create_trigger_func} (100%) rename odd/encrypt_decrypt/{7_create_trigger => 8_create_trigger} (100%) rename odd/encrypt_decrypt/{8_insert_user_data => 9_insert_user_data} (100%) create mode 100644 odd/fib/4_show_exported_func diff --git a/odd/encrypt_decrypt/9_check_result b/odd/encrypt_decrypt/10_check_result similarity index 100% rename from odd/encrypt_decrypt/9_check_result rename to odd/encrypt_decrypt/10_check_result diff --git a/odd/encrypt_decrypt/4_show_exported_func b/odd/encrypt_decrypt/4_show_exported_func new file mode 100644 index 0000000..3c40ca2 --- /dev/null +++ b/odd/encrypt_decrypt/4_show_exported_func @@ -0,0 +1 @@ +select * from wasm.exported_functions; diff --git a/odd/encrypt_decrypt/4_create_user_table b/odd/encrypt_decrypt/5_create_user_table similarity index 100% rename from odd/encrypt_decrypt/4_create_user_table rename to odd/encrypt_decrypt/5_create_user_table diff --git a/odd/encrypt_decrypt/5_init_secret_key b/odd/encrypt_decrypt/6_init_secret_key similarity index 100% rename from odd/encrypt_decrypt/5_init_secret_key rename to odd/encrypt_decrypt/6_init_secret_key diff --git a/odd/encrypt_decrypt/6_create_trigger_func b/odd/encrypt_decrypt/7_create_trigger_func similarity index 100% rename from odd/encrypt_decrypt/6_create_trigger_func rename to odd/encrypt_decrypt/7_create_trigger_func diff --git a/odd/encrypt_decrypt/7_create_trigger b/odd/encrypt_decrypt/8_create_trigger similarity index 100% rename from odd/encrypt_decrypt/7_create_trigger rename to odd/encrypt_decrypt/8_create_trigger diff --git a/odd/encrypt_decrypt/8_insert_user_data b/odd/encrypt_decrypt/9_insert_user_data similarity index 100% rename from odd/encrypt_decrypt/8_insert_user_data rename to odd/encrypt_decrypt/9_insert_user_data diff --git a/odd/fib/4_show_exported_func b/odd/fib/4_show_exported_func new file mode 100644 index 0000000..3c40ca2 --- /dev/null +++ b/odd/fib/4_show_exported_func @@ -0,0 +1 @@ +select * from wasm.exported_functions; -- Gitee From 2805e2c09f5642d5c5fa0305b6a0b65a7a11cb28 Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 15:34:55 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96ODD=20demo=E6=BC=94?= =?UTF-8?q?=E7=A4=BA=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/fib/5_timing_sql | 14 ++++++++++++++ odd/fib/6_timing_wasm | 14 ++++++++++++++ odd/fib/src/lib.rs | 2 -- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 odd/fib/5_timing_sql create mode 100644 odd/fib/6_timing_wasm diff --git a/odd/fib/5_timing_sql b/odd/fib/5_timing_sql new file mode 100644 index 0000000..c574eec --- /dev/null +++ b/odd/fib/5_timing_sql @@ -0,0 +1,14 @@ +\timing + +select sql_fib(10); + +select sql_fib(30); + +select sql_fib(50); + +select sql_fib(70); + +select sql_fib(90); + +\timing + diff --git a/odd/fib/6_timing_wasm b/odd/fib/6_timing_wasm new file mode 100644 index 0000000..63a9362 --- /dev/null +++ b/odd/fib/6_timing_wasm @@ -0,0 +1,14 @@ +\timing + +select gs_fib(10); + +select gs_fib(30); + +select gs_fib(50); + +select gs_fib(70); + +select gs_fib(90); + +\timing + diff --git a/odd/fib/src/lib.rs b/odd/fib/src/lib.rs index 821e520..3eb7704 100644 --- a/odd/fib/src/lib.rs +++ b/odd/fib/src/lib.rs @@ -1,5 +1,3 @@ -use opengauss_bindgen::*; - #[opengauss_bindgen::opengauss_bindgen] fn fib(n: u64) -> u64 { if n <= 1 { -- Gitee