MCPcopy Create free account
hub / github.com/SeaQL/sea-orm / extract_key

Function extract_key

src/query/loader.rs:342–404  ·  view source on GitHub ↗
(target_col: &Identity, model: &Model)

Source from the content-addressed store, hash-verified

340}
341
342fn extract_key<Model>(target_col: &Identity, model: &Model) -> Result<ValueTuple, DbErr>
343where
344 Model: ModelTrait,
345{
346 Ok(match target_col {
347 Identity::Unary(a) => {
348 let a = a.to_string();
349 let column_a =
350 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(&a)
351 .map_err(|_| DbErr::Type(format!("Failed at mapping '{a}' to column A:1")))?;
352 ValueTuple::One(model.get(column_a))
353 }
354 Identity::Binary(a, b) => {
355 let a = a.to_string();
356 let b = b.to_string();
357 let column_a =
358 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(&a)
359 .map_err(|_| DbErr::Type(format!("Failed at mapping '{a}' to column A:2")))?;
360 let column_b =
361 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(&b)
362 .map_err(|_| DbErr::Type(format!("Failed at mapping '{b}' to column B:2")))?;
363 ValueTuple::Two(model.get(column_a), model.get(column_b))
364 }
365 Identity::Ternary(a, b, c) => {
366 let a = a.to_string();
367 let b = b.to_string();
368 let c = c.to_string();
369 let column_a =
370 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(
371 &a.to_string(),
372 )
373 .map_err(|_| DbErr::Type(format!("Failed at mapping '{a}' to column A:3")))?;
374 let column_b =
375 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(
376 &b.to_string(),
377 )
378 .map_err(|_| DbErr::Type(format!("Failed at mapping '{b}' to column B:3")))?;
379 let column_c =
380 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(
381 &c.to_string(),
382 )
383 .map_err(|_| DbErr::Type(format!("Failed at mapping '{c}' to column C:3")))?;
384 ValueTuple::Three(
385 model.get(column_a),
386 model.get(column_b),
387 model.get(column_c),
388 )
389 }
390 Identity::Many(cols) => {
391 let mut values = Vec::new();
392 for col in cols {
393 let col_name = col.to_string();
394 let column =
395 <<<Model as ModelTrait>::Entity as EntityTrait>::Column as FromStr>::from_str(
396 &col_name,
397 )
398 .map_err(|_| DbErr::Type(format!("Failed at mapping '{col_name}' to colum")))?;
399 values.push(model.get(column))

Callers 3

load_oneMethod · 0.85
load_manyMethod · 0.85
load_many_to_manyMethod · 0.85

Calls 3

pushMethod · 0.80
newFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected