Skip to main content

rbdc_tdengine/
encode.rs

1
2// use bigdecimal::BigDecimal;
3// use oracle::sql_type::ToSql;
4// use taos_query::prelude::ColumnView;
5use rbs::Value;
6// use taos::ColumnView;
7//
8// pub trait Encode {
9//     fn encode(self, vec: & mut Vec<ColumnView>,) -> Result<(), Error>;
10// }
11// impl Encode for Value {
12//     fn encode(self, vec: &mut Vec<ColumnView>) -> Result<(), Error> {
13//         match self{
14//             // Value::Ext(t, v) => match t {
15//             //     "Date" => {
16//             //         let s = v.as_str().unwrap_or_default();
17//             //         let d = DateTime::from_str(s).unwrap();
18//             //         // d.and_hms_milli_opt()
19//             //
20//             //         let cv= ColumnView::from_millis_timestamp(vec![d.unix_timestamp_millis()]);
21//             //         vec.push(cv);
22//             //     },
23//             //     "DateTime" => {
24//             //         let s = v.as_str().unwrap_or_default();
25//             //         let d = DateTime::from_str(s).unwrap();
26//             //         // d.and_hms_milli_opt()
27//             //
28//             //         let cv= ColumnView::from_millis_timestamp(vec![d.unix_timestamp_millis()]);
29//             //         vec.push(cv);
30//             //     }
31//             //     "Time" => {
32//             //         //TODO: need to fix this
33//             //         let s = v.as_str().unwrap_or_default();
34//             //         let d = DateTime::from_str(s).unwrap();
35//             //         // d.and_hms_milli_opt()
36//             //         let cv= ColumnView::from_millis_timestamp(vec![d.unix_timestamp_millis()]);
37//             //         vec.push(cv);
38//             //     }
39//             //     "Decimal" => {
40//             //         // let d = BigDecimal::from_str(&v.into_string().unwrap_or_default());
41//             //         let d:f64=v.into_string().unwrap().parse().unwrap();
42//             //         let cv=ColumnView::from_doubles(vec![d]);
43//             //         vec.push(cv);
44//             //     }
45//             //     "Json" => {
46//             //         return Err(Error::from("unimpl"));
47//             //     }
48//             //     "Timestamp" => {
49//             //         let t = v.as_u64().unwrap_or_default() as i64;
50//             //         let cv= ColumnView::from_millis_timestamp(vec![t]);
51//             //         vec.push(cv);
52//             //     }
53//             //     "Uuid" => {
54//             //         let d = v.into_string().unwrap();
55//             //         let cv=ColumnView::from_nchar(vec![d]);
56//             //         vec.push(cv);
57//             //     }
58//             //     _ => {
59//             //         return Err(Error::from("unimpl"));
60//             //     },
61//             // }
62//             Value::String(str)=>{
63//                 let cv=ColumnView::from_nchar(vec![str]);
64//                 vec.push(cv);
65//             }
66//             Value::I32(int)=>{
67//                 let cv=ColumnView::from_ints(vec![int]);
68//                 vec.push(cv);
69//             }
70//             Value::I64(int)=>{
71//                 let cv=ColumnView::from_big_ints(vec![int]);
72//                 vec.push(cv);
73//             }
74//             Value::F32(v)=>{
75//                 let cv=ColumnView::from_floats(vec![v]);
76//                 vec.push(cv);
77//             }
78//             Value::F64(v)=>{
79//                 let cv=ColumnView::from_doubles(vec![v]);
80//                 vec.push(cv);
81//             }
82//             Value::U32(v)=>{
83//                 let cv=ColumnView::from_unsigned_ints(vec![v]);
84//                 vec.push(cv);
85//             }
86//             Value::U64(v)=>{
87//                 let cv=ColumnView::from_unsigned_big_ints(vec![v]);
88//                 vec.push(cv);
89//             }
90//
91//             //TODO: more types!
92//             _=>{
93//                 let cv=ColumnView::from_nchar(vec![self.to_string()]);
94//                 vec.push(cv);
95//             }
96//         }
97//         Ok(())
98//     }
99// }
100
101/// 将sql 语名中的 ? 替换 为Value 中的值
102pub fn sql_replacen(mut sql:String,params: Vec<Value>)->String {
103    // let  placeholders=vec!["###","@","##"];
104    // let mut  base64s=vec![];
105    // let mut index=0;
106    for v in params {
107        match v {
108            // Value::Null => {}
109            // Value::Bool(_) => {
110            //     sql= sql.replacen("?", &*format!("{}", v), 1);
111            // }
112            // Value::I32(_) => {}
113            // Value::I64(_) => {}
114            // Value::U32(_) => {}
115            // Value::U64(_) => {}
116            // Value::F32(_) => {}
117            // Value::F64(_) => {}
118            Value::String(_) => {
119                // sql = sql.replacen("?", "#", 1);
120                // sql = sql.replace("\"", "'");
121               //  println!("{}",v);
122               //  let v_string=format!("{}",v);
123               //  while let Some(find)= v_string.find(placeholders[index]) {
124               //      index=index+1;
125               //      break;
126               //  };
127               // println!("{},{}",index,placeholders[index]);
128               // let base64= base64_url::encode(v_string.as_str());
129               //  base64s.push(v_string);
130                // println!("base64={}",base64);
131                // let data=base64_url::decode(&base64);
132                //  println!("{:?}",data);
133
134                // let v_rep=format!("{}",v).replace("\"",placeholders[index]);
135                // let v_rep=v_rep.trim_start_matches(placeholders[index]);
136                // let v_rep=v_rep.trim_end_matches(placeholders[index]);
137                //
138                // println!("{}",v_rep);
139
140                sql = sql.replacen("?", format!("{}",v).as_str(), 1);
141
142                 // sql = sql.replace("\"", "'");
143            }
144            // Value::Binary(_) => {}
145            // Value::Array(_) => {}
146            // Value::Map(_) => {}
147            Value::Ext(name, ext_v) => {
148                if name.eq("Timestamp") {
149                    let v=format!("{}",ext_v);
150                    let v=v.parse::<u64>().unwrap_or_default();
151                    sql = sql.replacen("?", &*format!("{}",v), 1);
152                }
153                if name.eq("DateTime"){
154                    sql= sql.replacen("?", &*format!("{}", ext_v), 1);
155                }
156                if name.eq("Time"){
157                    sql= sql.replacen("?", &*format!("{}", ext_v), 1);
158                }
159                if name.eq("Date"){
160                    sql= sql.replacen("?", &*format!("{}", ext_v), 1);
161                }
162
163            }
164            // Value::Map(mut m) => {
165            //     //Ok(IsNull::Yes)
166            //     println!("{}",m);
167            //     let t = m.index("type").as_str().unwrap_or_default();
168            //     if t != "" {
169            //         match t {
170            //             "Date" => {
171            //                 let ext_v = m.rm("value");
172            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
173            //             }
174            //             "DateTime" => {
175            //                 let ext_v = m.rm("value");
176            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
177            //             }
178            //             "Time" => {
179            //                 let ext_v = m.rm("value");
180            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
181            //             }
182            //             "Timestamp" => {
183            //                 let ext_v = m.rm("value");
184            //                 let ext_v_string=format!("{}", ext_v).replace("TS","");
185            //                 sql = sql.replacen("?", &ext_v_string, 1);
186            //             }
187            //             "Decimal" => {
188            //                 let ext_v = m.rm("value");
189            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
190            //             }
191            //             "Json" => {
192            //                 let ext_v = m.rm("value");
193            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
194            //             }
195            //             "Uuid" => {
196            //                 let ext_v = m.rm("value");
197            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
198            //             }
199            //             _ => {
200            //                 let ext_v = m.rm("value");
201            //                 sql = sql.replacen("?", &*format!("{}", ext_v), 1);
202            //             }
203            //         }
204            //     }
205            // }
206            _ => {
207                sql = sql.replacen("?", &*format!("{}", v), 1);
208            }
209        }
210
211    }
212    sql = sql.replace("\"", "'");
213
214    // sql=sql.replace(placeholders[index],"\"");
215
216
217    return sql;
218}
219
220#[cfg(test)]
221mod test{
222    use std::fmt::Debug;
223    use std::str::FromStr;
224    use fastdate::DateTime;
225    use rbdc::date::Date;
226    use rbdc::{datetime, time};
227    use rbdc::timestamp::Timestamp;
228    use rbs::Value;
229    use taos::ColumnView;
230    use crate::encode::sql_replacen;
231    // use crate::encode::Encode;
232
233    #[test]
234    fn test_value(){
235        let string_v=Value::String("测试".to_string());
236        let timestamp_v=Value::Ext("Timestamp",Box::new(Value::I64(1677859610000)));
237        println!("{},{}",timestamp_v,string_v);
238        let mut  cvs:Vec<ColumnView>=vec![];
239        // string_v.encode(&mut cvs);
240        // timestamp_v.encode(&mut cvs);
241        // for cv in cvs {
242        //     println!("{}",cv.to_vec());
243        // }
244    }
245    #[test]
246    fn string_replacen(){
247        let mut sql="select * from table where id=? and name=? and u32=? and bool=? timestamp<? and date>? and datetime<? and time=?".to_string();
248        let json_string=r#"[{"ts##":"2023-04-13 22:32:38.223747","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_PULS_OXIM_SAT_O2","vital_sign_value":"100","vital_sign_unit":"MDC_DIM_PERCENT","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.223848","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_PULS_OXIM_PULS_RATE","vital_sign_value":"94","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.223929","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_BLD_PERF_INDEX","vital_sign_value":"2.19","vital_sign_unit":"MDC_DIM_PERCENT","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224007","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_TTHOR_RESP_RATE","vital_sign_value":"20","vital_sign_unit":"MDC_DIM_RESP_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224084","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_ECG_V_P_C_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224169","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MNDRY_ECG_PAUSE_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224248","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MNDRY_ECG_VPB_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224324","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MNDRY_ECG_RHY_V_P_C_CPLT_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224378","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MNDRY_ECG_RHY_MISSB_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.224429","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MNDRY_ECG_BEAT_V_P_C_RonT_RATE","vital_sign_value":"0","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null},{"ts":"2023-04-13 22:32:38.22446","id":null,"device_no":"00","patientId":null,"vital_sign_name":"MDC_ECG_HEART_RATE","vital_sign_value":"95","vital_sign_unit":"MDC_DIM_BEAT_PER_MIN","acq_timestamp":1666277450000,"time_slot":null,"record_timestamp":null,"userId":null}]"#;
249        let name="字\\'符\\'串";
250        let vaules=vec![
251                        Value::I64(10),
252                        Value::String(name.to_string()),
253                        Value::U32(32),
254                        Value::Bool(false),
255                        Value::Ext("Timestamp",Box::new(Value::I64(1677859610000))),
256                        Value::Ext("Date", Box::new(Value::String("2023-03-20".to_string()))),
257                        // Value::from(Date::from_str("2023-03-20").unwrap()),
258                        Value::Ext("DateTime", Box::new(Value::String(fastdate::DateTime::now().to_string()))),
259                        // Value::from(datetime::DateTime::from(fastdate::DateTime::now())),
260                        Value::Ext("Time", Box::new(Value::String("15:04:05.999999999".to_string()))),
261                        // Value::from(rbdc::types::time::Time::from_str("15:04:05.999999999").unwrap()),
262
263
264
265        ];
266        sql=sql_replacen(sql,vaules);
267        // sql=sql.replace("\"","'");
268        println!("{}",sql);
269    }
270}