parent
366e17feae
commit
696470c358
@ -1 +1 @@
|
||||
{"version":3,"file":"index.min.js","sources":["../../../../node_modules/.pnpm/@tauri-apps+api@1.2.0/node_modules/@tauri-apps/api/chunk-FEIY7W7S.js","../../../../node_modules/.pnpm/@tauri-apps+api@1.2.0/node_modules/@tauri-apps/api/chunk-RCPA6UVN.js","../index.ts"],"sourcesContent":["var d=Object.defineProperty;var e=(c,a)=>{for(var b in a)d(c,b,{get:a[b],enumerable:!0})};export{e as a};\n","import{a as d}from\"./chunk-FEIY7W7S.js\";var f={};d(f,{convertFileSrc:()=>w,invoke:()=>c,transformCallback:()=>s});function u(){return window.crypto.getRandomValues(new Uint32Array(1))[0]}function s(e,r=!1){let n=u(),t=`_${n}`;return Object.defineProperty(window,t,{value:o=>(r&&Reflect.deleteProperty(window,t),e==null?void 0:e(o)),writable:!1,configurable:!0}),n}async function c(e,r={}){return new Promise((n,t)=>{let o=s(i=>{n(i),Reflect.deleteProperty(window,`_${a}`)},!0),a=s(i=>{t(i),Reflect.deleteProperty(window,`_${o}`)},!0);window.__TAURI_IPC__({cmd:e,callback:o,error:a,...r})})}function w(e,r=\"asset\"){let n=encodeURIComponent(e);return navigator.userAgent.includes(\"Windows\")?`https://${r}.localhost/${n}`:`${r}://localhost/${n}`}export{s as a,c as b,w as c,f as d};\n",null],"names":["d","invoke"],"mappings":"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"}
|
||||
{"version":3,"file":"index.min.js","sources":["../../../../node_modules/.pnpm/@tauri-apps+api@1.2.0/node_modules/@tauri-apps/api/chunk-FEIY7W7S.js","../../../../node_modules/.pnpm/@tauri-apps+api@1.2.0/node_modules/@tauri-apps/api/chunk-RCPA6UVN.js","../index.ts"],"sourcesContent":["var d=Object.defineProperty;var e=(c,a)=>{for(var b in a)d(c,b,{get:a[b],enumerable:!0})};export{e as a};\n","import{a as d}from\"./chunk-FEIY7W7S.js\";var f={};d(f,{convertFileSrc:()=>w,invoke:()=>c,transformCallback:()=>s});function u(){return window.crypto.getRandomValues(new Uint32Array(1))[0]}function s(e,r=!1){let n=u(),t=`_${n}`;return Object.defineProperty(window,t,{value:o=>(r&&Reflect.deleteProperty(window,t),e==null?void 0:e(o)),writable:!1,configurable:!0}),n}async function c(e,r={}){return new Promise((n,t)=>{let o=s(i=>{n(i),Reflect.deleteProperty(window,`_${a}`)},!0),a=s(i=>{t(i),Reflect.deleteProperty(window,`_${o}`)},!0);window.__TAURI_IPC__({cmd:e,callback:o,error:a,...r})})}function w(e,r=\"asset\"){let n=encodeURIComponent(e);return navigator.userAgent.includes(\"Windows\")?`https://${r}.localhost/${n}`:`${r}://localhost/${n}`}export{s as a,c as b,w as c,f as d};\n",null],"names":["d","invoke"],"mappings":"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"}
|
@ -1 +1 @@
|
||||
{"version":3,"file":"index.mjs","sources":["../index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAgBA;;;;;AAKG;AACW,MAAO,QAAQ,CAAA;AAE3B,IAAA,WAAA,CAAY,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED;;;;;;;;;;;;;;AAcG;AACH,IAAA,aAAa,IAAI,CAAC,IAAY,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,MAAM,CAAS,iBAAiB,EAAE;AACpD,YAAA,EAAE,EAAE,IAAI;AACT,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC5B;AAED;;;;;;;;;;;;;;;AAeG;IACH,OAAO,GAAG,CAAC,IAAY,EAAA;AACrB,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3B;AAED;;;;;;;;;;;;AAYG;AACH,IAAA,MAAM,OAAO,CAAC,KAAa,EAAE,UAAsB,EAAA;QACjD,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,MAAM,CAC/C,oBAAoB,EACpB;YACE,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,KAAK;AACL,YAAA,MAAM,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,EAAE;AACzB,SAAA,CACF,CAAC;QAEF,OAAO;YACL,YAAY;YACZ,YAAY;SACb,CAAC;KACH;AAED;;;;;;;;;;;AAWG;AACH,IAAA,MAAM,MAAM,CAAI,KAAa,EAAE,UAAsB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAI,mBAAmB,EAAE;YAClD,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,KAAK;AACL,YAAA,MAAM,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,EAAE;AACzB,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;;;;;;;AAUG;IACH,MAAM,KAAK,CAAC,EAAW,EAAA;AACrB,QAAA,MAAM,OAAO,GAAG,MAAM,MAAM,CAAU,kBAAkB,EAAE;YACxD,EAAE;AACH,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AACF;;;;"}
|
||||
{"version":3,"file":"index.mjs","sources":["../index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAkBA;;;;;;;AAOG;AACW,MAAO,QAAQ,CAAA;AAE3B,IAAA,WAAA,CAAY,UAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC9B;AAED;;;;;;;;;;;;;;AAcG;AACH,IAAA,aAAa,IAAI,CAAyB,UAAa,EAAA;AACrD,QAAA,MAAM,KAAK,GAAG,MAAM,MAAM,CAAS,iBAAiB,EAAE;AACpD,YAAA,EAAE,EAAE,UAAU;AACf,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,QAAQ,CAAC,KAAqB,CAAC,CAAC;KAC5C;AAED;;;;;;;;;;;;;;;AAeG;IACH,OAAO,GAAG,CAAC,UAAwB,EAAA;AACjC,QAAA,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;KACjC;AAED;;;;;;;;;;;;AAYG;AACH,IAAA,MAAM,OAAO,CAAC,GAAW,EAAE,UAAsB,EAAA;QAC/C,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,MAAM,CAC/C,oBAAoB,EACpB;YACE,EAAE,EAAE,IAAI,CAAC,UAAU;YACnB,GAAG;AACH,YAAA,MAAM,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,EAAE;AACzB,SAAA,CACF,CAAC;QAEF,OAAO;YACL,YAAY;YACZ,YAAY;SACb,CAAC;KACH;AAED;;;;;;;;;;;AAWG;AACH,IAAA,MAAM,MAAM,CAAgB,GAAW,EAAE,UAAsB,EAAA;AAC7D,QAAA,OAAO,MAAM,MAAM,CAAI,mBAAmB,EAAE;YAC1C,EAAE,EAAE,IAAI,CAAC,UAAU;YACnB,GAAG;AACH,YAAA,MAAM,EAAE,UAAU,KAAA,IAAA,IAAV,UAAU,KAAV,KAAA,CAAA,GAAA,UAAU,GAAI,EAAE;AACzB,SAAA,CAAC,CAAC;KACJ;AAED;;;;;;;;;;AAUG;AACH,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,OAAO,MAAM,MAAM,CAAU,kBAAkB,EAAE;YAC/C,EAAE,EAAE,IAAI,CAAC,UAAU;AACpB,SAAA,CAAC,CAAC;KACJ;AACF;;;;"}
|
@ -0,0 +1,294 @@
|
||||
use crate::plugin::Error;
|
||||
use serde_json::Value as JsonValue;
|
||||
use tracing::debug;
|
||||
|
||||
#[allow(unused_imports)]
|
||||
use sqlx::{Column, Row, TypeInfo};
|
||||
|
||||
/// ensures consistent conversion of a binary
|
||||
/// blob in the database to an array of JsonValue::number's
|
||||
fn blob(b: Vec<u8>) -> JsonValue {
|
||||
JsonValue::Array(b.into_iter().map(|n| JsonValue::Number(n.into())).collect())
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlite")]
|
||||
pub fn deserialize_col<'a>(
|
||||
row: &'a sqlx::sqlite::SqliteRow,
|
||||
col: &'a sqlx::sqlite::SqliteColumn,
|
||||
i: &'a usize,
|
||||
) -> Result<JsonValue, Error> {
|
||||
let info = col.type_info();
|
||||
debug!("Deserializing column of type {}", info.name());
|
||||
|
||||
if info.is_null() {
|
||||
Ok(JsonValue::Null)
|
||||
} else {
|
||||
let v = match info.name().to_uppercase().as_str() {
|
||||
"TEXT" | "STRING" | "VARCHAR" | "DATETIME" => {
|
||||
JsonValue::String(row.try_get::<String, &usize>(i)?)
|
||||
}
|
||||
"BLOB" => {
|
||||
let v = row.try_get::<Vec<u8>, &usize>(i)?;
|
||||
blob(v)
|
||||
}
|
||||
"INTEGER" | "INT" => {
|
||||
if let Ok(v) = row.try_get::<i64, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i32, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i16, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i8, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
|
||||
return Err(Error::NumericDecoding(
|
||||
info.name().to_string(),
|
||||
String::from("Sqlite"),
|
||||
));
|
||||
}
|
||||
"BOOL" | "BOOLEAN" => {
|
||||
// booleans in sqlite are represented as an integer
|
||||
if let Ok(b) = row.try_get::<i8, &usize>(i) {
|
||||
let b: JsonValue = match b {
|
||||
0_i8 => JsonValue::Bool(false),
|
||||
1_i8 => JsonValue::Bool(true),
|
||||
_ => {
|
||||
return Err(Error::BooleanDecoding(
|
||||
b.to_string(),
|
||||
info.name().to_string(),
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
return Ok(b);
|
||||
}
|
||||
|
||||
// but they can also be represented with "TRUE" / "FALSE" symbols too
|
||||
if let Ok(b) = row.try_get::<String, &usize>(i) {
|
||||
JsonValue::Bool(&b.to_lowercase() == "true")
|
||||
} else {
|
||||
return Err(Error::BooleanDecoding(
|
||||
i.to_string(),
|
||||
info.name().to_string(),
|
||||
));
|
||||
}
|
||||
}
|
||||
"REAL" | "FLOAT" | "DOUBLE" | "NUMERIC" => {
|
||||
let v: f64 = row.try_get(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
_ => {
|
||||
tracing::info!(
|
||||
"an unknown type \"{}\" encountered by Sqlite DB, returning NULL value",
|
||||
info.name().to_string()
|
||||
);
|
||||
JsonValue::Null
|
||||
}
|
||||
};
|
||||
|
||||
Ok(v)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "postgres")]
|
||||
pub fn deserialize_col<'a>(
|
||||
row: &'a sqlx::postgres::PgRow,
|
||||
col: &'a sqlx::postgres::PgColumn,
|
||||
i: &'a usize,
|
||||
) -> Result<JsonValue, Error> {
|
||||
let info = col.type_info();
|
||||
debug!("Deserializing column of type {}", info.name());
|
||||
|
||||
if info.is_null() {
|
||||
Ok(JsonValue::Null)
|
||||
} else {
|
||||
Ok(match info.name().to_uppercase().as_str() {
|
||||
"TEXT" | "VARCHAR" | "NAME" => JsonValue::String(row.try_get(i)?),
|
||||
"JSON" => JsonValue::String(row.try_get(i)?),
|
||||
"BOOL" => JsonValue::Bool(row.try_get(i)?),
|
||||
"DATE" => JsonValue::String(row.try_get(i)?),
|
||||
"TIME" => JsonValue::String(row.try_get(i)?),
|
||||
"TIMESTAMP" => JsonValue::String(row.try_get(i)?),
|
||||
"TIMESTAMPTZ" => JsonValue::String(row.try_get(i)?),
|
||||
"BLOB" => {
|
||||
let v = row.try_get::<Vec<u8>, &usize>(i)?;
|
||||
blob(v)
|
||||
}
|
||||
"BYTEA" => {
|
||||
// try to encode into numeric array
|
||||
let v = row.try_get::<Vec<u8>, &usize>(i)?;
|
||||
JsonValue::Array(v.into_iter().map(|n| JsonValue::Number(n.into())).collect())
|
||||
}
|
||||
"CHAR" => JsonValue::Number(row.try_get::<i8, &usize>(i)?.into()),
|
||||
"INT2" | "SMALLINT" | "SMALLSERIAL" => {
|
||||
JsonValue::Number(row.try_get::<i16, &usize>(i)?.into())
|
||||
}
|
||||
"INT4" | "INT" | "SERIAL" => JsonValue::Number(row.try_get::<i32, &usize>(i)?.into()),
|
||||
"INT8" | "BIGINT" | "BIGSERIAL" => {
|
||||
JsonValue::Number(row.try_get::<i64, &usize>(i)?.into())
|
||||
}
|
||||
|
||||
"FLOAT4" | "REAL" => {
|
||||
let v = row.try_get::<f32, &usize>(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
"FLOAT8" | "DOUBLE PRECISION" => {
|
||||
let v = row.try_get::<f64, &usize>(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
"NUMERIC" => {
|
||||
if let Ok(v) = row.try_get::<i64, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i32, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i16, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
if let Ok(v) = row.try_get::<i8, &usize>(i) {
|
||||
return Ok(JsonValue::Number(v.into()));
|
||||
}
|
||||
|
||||
return Err(Error::NumericDecoding(
|
||||
info.name().to_string(),
|
||||
String::from("Postgres"),
|
||||
));
|
||||
}
|
||||
_ => {
|
||||
tracing::info!(
|
||||
"an unknown type \"{}\" encountered by Postgres DB, returning NULL value",
|
||||
info.name().to_string()
|
||||
);
|
||||
JsonValue::Null
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "mysql")]
|
||||
pub fn deserialize_col<'a>(
|
||||
row: &'a sqlx::mysql::MySqlRow,
|
||||
col: &'a sqlx::mysql::MySqlColumn,
|
||||
i: &'a usize,
|
||||
) -> Result<JsonValue, Error> {
|
||||
let info = col.type_info();
|
||||
debug!("Deserializing column of type {}", info.name());
|
||||
|
||||
if info.is_null() {
|
||||
Ok(JsonValue::Null)
|
||||
} else {
|
||||
let v = match info.name().to_uppercase().as_str() {
|
||||
"TIMESTAMP" => JsonValue::String(row.try_get(i)?),
|
||||
"DATE" => JsonValue::String(row.try_get(i)?),
|
||||
"TIME" => JsonValue::String(row.try_get(i)?),
|
||||
"DATETIME" => JsonValue::String(row.try_get(i)?),
|
||||
"NEWDATE" => JsonValue::String(row.try_get(i)?),
|
||||
"VARCHAR" | "TEXT" | "CHAR" => JsonValue::String(row.try_get(i)?),
|
||||
"JSON" => JsonValue::String(row.try_get(i)?),
|
||||
"VAR_STRING" => JsonValue::String(row.try_get(i)?),
|
||||
"STRING" => JsonValue::String(row.try_get(i)?),
|
||||
"BLOB" | "TINY_BLOB" | "MEDIUM_BLOB" | "LONG_BLOB" => {
|
||||
let v = row.try_get::<Vec<u8>, &usize>(i)?;
|
||||
blob(v)
|
||||
}
|
||||
"ENUM" => JsonValue::String(row.try_get(i)?),
|
||||
"SET" => JsonValue::String(row.try_get(i)?),
|
||||
"GEOMETRY" => {
|
||||
// try to encode into numeric array
|
||||
let v = row.try_get::<Vec<u8>, &usize>(i)?;
|
||||
JsonValue::Array(v.into_iter().map(|n| JsonValue::Number(n.into())).collect())
|
||||
}
|
||||
"TINY" | "TINYINT" => JsonValue::Number(row.try_get::<i8, &usize>(i)?.into()),
|
||||
"SMALL" | "SMALLINT" => JsonValue::Number(row.try_get::<i16, &usize>(i)?.into()),
|
||||
"YEAR" => JsonValue::Number(row.try_get::<i16, &usize>(i)?.into()),
|
||||
// really only takes 24-bits
|
||||
"MEDIUM" | "MEDIUMINT" => JsonValue::Number(row.try_get::<i32, &usize>(i)?.into()),
|
||||
// 32-bit primitive
|
||||
"INT" => JsonValue::Number(row.try_get::<i32, &usize>(i)?.into()),
|
||||
"BIGINT" => JsonValue::Number(row.try_get::<i64, &usize>(i)?.into()),
|
||||
"REAL" | "FLOAT" => {
|
||||
let v = row.try_get::<f64, &usize>(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
"DOUBLE" => JsonValue::Number(row.try_get::<i64, &usize>(i)?.into()),
|
||||
"BIT" => JsonValue::Number(row.try_get::<i8, &usize>(i)?.into()),
|
||||
_ => {
|
||||
tracing::info!(
|
||||
"an unknown type \"{}\" encountered by MySql database, returning NULL value",
|
||||
info.name().to_string()
|
||||
);
|
||||
JsonValue::Null
|
||||
}
|
||||
};
|
||||
|
||||
Ok(v)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "mssql")]
|
||||
pub fn deserialize_col<'a>(
|
||||
row: &'a sqlx::mssql::MssqlRow,
|
||||
col: &'a sqlx::mssql::MssqlColumn,
|
||||
i: &'a usize,
|
||||
) -> Result<JsonValue, Error> {
|
||||
let info = col.type_info();
|
||||
debug!("Deserializing column of type {}", info.name());
|
||||
|
||||
if info.is_null() {
|
||||
Ok(JsonValue::Null)
|
||||
} else {
|
||||
let v = match info.name().to_uppercase().as_str() {
|
||||
"TIMESTAMP" => JsonValue::String(row.try_get(i)?),
|
||||
"DATE" => JsonValue::String(row.try_get(i)?),
|
||||
"TIME" => JsonValue::String(row.try_get(i)?),
|
||||
"DATETIME" => JsonValue::String(row.try_get(i)?),
|
||||
"NEWDATE" => JsonValue::String(row.try_get(i)?),
|
||||
"VARCHAR" => JsonValue::String(row.try_get(i)?),
|
||||
"VAR_STRING" => JsonValue::String(row.try_get(i)?),
|
||||
"STRING" => JsonValue::String(row.try_get(i)?),
|
||||
"BLOB" | "TINY_BLOB" | "MEDIUM_BLOB" | "LONG_BLOB" => {
|
||||
let v = row.try_get::<String, &usize>(i)?;
|
||||
let v = v.as_bytes().to_vec();
|
||||
blob(v)
|
||||
}
|
||||
"ENUM" => JsonValue::String(row.try_get(i)?),
|
||||
"SET" => JsonValue::String(row.try_get(i)?),
|
||||
"GEOMETRY" => JsonValue::from(row.try_get::<String, &usize>(i)?),
|
||||
"GEOGRAPHY" => JsonValue::from(row.try_get::<String, &usize>(i)?),
|
||||
"TINY" | "TINYINT" => JsonValue::Number(row.try_get::<i8, &usize>(i)?.into()),
|
||||
"SMALL" | "SMALLINT" => JsonValue::Number(row.try_get::<i16, &usize>(i)?.into()),
|
||||
// really only takes 24-bits
|
||||
"MEDIUM" | "MEDIUMINT" => JsonValue::Number(row.try_get::<i32, &usize>(i)?.into()),
|
||||
// 32-bit primitive
|
||||
"INT" => JsonValue::Number(row.try_get::<i32, &usize>(i)?.into()),
|
||||
// 64-bit int
|
||||
"BIGINT" => JsonValue::Number(row.try_get::<i64, &usize>(i)?.into()),
|
||||
"YEAR" => JsonValue::Number(row.try_get::<i16, &usize>(i)?.into()),
|
||||
"BIT" => JsonValue::Number(row.try_get::<i8, &usize>(i)?.into()),
|
||||
"DOUBLE" => JsonValue::Number(row.try_get::<i64, &usize>(i)?.into()),
|
||||
|
||||
"REAL" => {
|
||||
let v = row.try_get::<f64, &usize>(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
"FLOAT" => {
|
||||
let v = row.try_get::<f32, &usize>(i)?;
|
||||
JsonValue::from(v)
|
||||
}
|
||||
_ => {
|
||||
tracing::info!(
|
||||
"an unknown type \"{}\" encountered by MS SQL database, returning NULL value",
|
||||
info.name().to_string()
|
||||
);
|
||||
JsonValue::Null
|
||||
}
|
||||
};
|
||||
|
||||
Ok(v)
|
||||
}
|
||||
}
|
Loading…
Reference in new issue