Skip to content

Commit f60a75f

Browse files
committed
Made condition a Cow
1 parent 884221e commit f60a75f

File tree

3 files changed

+28
-47
lines changed

3 files changed

+28
-47
lines changed

src/conditional.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub trait BuildCondition<'a>: 'a {
3939
/**
4040
This enum represents all available ternary expression.
4141
*/
42-
#[derive(Debug, PartialEq)]
42+
#[derive(Debug, PartialEq, Clone)]
4343
pub enum TernaryCondition<'a> {
4444
/// Between represents "{} BETWEEN {} AND {}" from SQL
4545
Between(Box<[Condition<'a>; 3]>),
@@ -72,7 +72,7 @@ impl<'a> BuildCondition<'a> for TernaryCondition<'a> {
7272
/**
7373
This enum represents a binary expression.
7474
*/
75-
#[derive(Debug, PartialEq)]
75+
#[derive(Debug, PartialEq, Clone)]
7676
pub enum BinaryCondition<'a> {
7777
/// Representation of "{} = {}" in SQL
7878
Equals(Box<[Condition<'a>; 2]>),
@@ -133,7 +133,7 @@ impl<'a> BuildCondition<'a> for BinaryCondition<'a> {
133133
/**
134134
This enum represents all available unary conditions.
135135
*/
136-
#[derive(Debug, PartialEq)]
136+
#[derive(Debug, PartialEq, Clone)]
137137
pub enum UnaryCondition<'a> {
138138
/// Representation of SQL's "{} IS NULL"
139139
IsNull(Box<Condition<'a>>),
@@ -177,7 +177,7 @@ impl<'a> BuildCondition<'a> for UnaryCondition<'a> {
177177
/**
178178
This enum represents a condition tree.
179179
*/
180-
#[derive(Debug, PartialEq)]
180+
#[derive(Debug, PartialEq, Clone)]
181181
pub enum Condition<'a> {
182182
/// A list of [Condition]s, that get expanded to "{} AND {} ..."
183183
Conjunction(Vec<Condition<'a>>),

src/join_table.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::borrow::Cow;
12
use std::fmt::{Display, Formatter, Write};
23

34
use crate::conditional::{BuildCondition, Condition};
@@ -63,13 +64,13 @@ pub trait JoinTable<'post_query> {
6364
- `s`: Mutable reference to String to write to.
6465
- `lookup`: List of values for bind parameter.
6566
*/
66-
fn build(self, s: &mut String, lookup: &mut Vec<Value<'post_query>>);
67+
fn build(&self, s: &mut String, lookup: &mut Vec<Value<'post_query>>);
6768
}
6869

6970
/**
7071
Data of a JOIN expression.
7172
*/
72-
#[derive(Debug, Copy, Clone)]
73+
#[derive(Debug, Clone)]
7374
pub struct JoinTableData<'until_build, 'post_query> {
7475
/// Type of the join operation
7576
pub join_type: JoinType,
@@ -78,15 +79,15 @@ pub struct JoinTableData<'until_build, 'post_query> {
7879
/// Alias for the join table
7980
pub join_alias: &'until_build str,
8081
/// Condition to apply the join on
81-
pub join_condition: &'until_build Condition<'post_query>,
82+
pub join_condition: Cow<'until_build, Condition<'post_query>>,
8283
}
8384

8485
/**
8586
Representation of the JOIN expression
8687
8788
Should only be constructed via [DBImpl::join_table].
8889
*/
89-
#[derive(Debug, Copy, Clone)]
90+
#[derive(Debug, Clone)]
9091
pub enum JoinTableImpl<'until_build, 'post_query> {
9192
/**
9293
SQLite representation of a JOIN expression.
@@ -108,7 +109,7 @@ pub enum JoinTableImpl<'until_build, 'post_query> {
108109
impl<'until_build, 'post_query> JoinTable<'post_query>
109110
for JoinTableImpl<'until_build, 'post_query>
110111
{
111-
fn build(self, s: &mut String, lookup: &mut Vec<Value<'post_query>>) {
112+
fn build(&self, s: &mut String, lookup: &mut Vec<Value<'post_query>>) {
112113
match self {
113114
#[cfg(feature = "sqlite")]
114115
JoinTableImpl::SQLite(d) => write!(

src/lib.rs

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -46,54 +46,34 @@ pub mod value;
4646

4747
mod db_specific;
4848

49-
use rorm_declaration::imr::Annotation;
50-
use rorm_declaration::imr::DbType;
49+
use std::borrow::Cow;
50+
51+
use rorm_declaration::imr::{Annotation, DbType};
5152

5253
use crate::aggregation::SelectAggregator;
53-
use crate::alter_table::AlterTable;
54-
use crate::alter_table::AlterTableData;
55-
use crate::alter_table::AlterTableImpl;
56-
use crate::alter_table::AlterTableOperation;
54+
use crate::alter_table::{AlterTable, AlterTableData, AlterTableImpl, AlterTableOperation};
5755
use crate::conditional::Condition;
58-
use crate::create_column::CreateColumnImpl;
5956
#[cfg(feature = "mysql")]
6057
use crate::create_column::CreateColumnMySQLData;
6158
#[cfg(feature = "postgres")]
6259
use crate::create_column::CreateColumnPostgresData;
6360
#[cfg(feature = "sqlite")]
6461
use crate::create_column::CreateColumnSQLiteData;
65-
use crate::create_column::SQLAnnotation;
66-
use crate::create_index::CreateIndex;
67-
use crate::create_index::CreateIndexData;
68-
use crate::create_index::CreateIndexImpl;
69-
use crate::create_table::CreateTable;
70-
use crate::create_table::CreateTableData;
71-
use crate::create_table::CreateTableImpl;
72-
use crate::create_trigger::SQLCreateTrigger;
73-
use crate::create_trigger::SQLCreateTriggerOperation;
74-
use crate::create_trigger::SQLCreateTriggerPointInTime;
75-
use crate::delete::Delete;
76-
use crate::delete::DeleteData;
77-
use crate::delete::DeleteImpl;
78-
use crate::drop_table::DropTable;
79-
use crate::drop_table::DropTableData;
80-
use crate::drop_table::DropTableImpl;
81-
use crate::insert::Insert;
82-
use crate::insert::InsertData;
83-
use crate::insert::InsertImpl;
84-
use crate::join_table::JoinTableData;
85-
use crate::join_table::JoinTableImpl;
86-
use crate::join_table::JoinType;
62+
use crate::create_column::{CreateColumnImpl, SQLAnnotation};
63+
use crate::create_index::{CreateIndex, CreateIndexData, CreateIndexImpl};
64+
use crate::create_table::{CreateTable, CreateTableData, CreateTableImpl};
65+
use crate::create_trigger::{
66+
SQLCreateTrigger, SQLCreateTriggerOperation, SQLCreateTriggerPointInTime,
67+
};
68+
use crate::delete::{Delete, DeleteData, DeleteImpl};
69+
use crate::drop_table::{DropTable, DropTableData, DropTableImpl};
70+
use crate::insert::{Insert, InsertData, InsertImpl};
71+
use crate::join_table::{JoinTableData, JoinTableImpl, JoinType};
8772
use crate::on_conflict::OnConflict;
8873
use crate::ordering::OrderByEntry;
89-
use crate::select::Select;
90-
use crate::select::SelectData;
91-
use crate::select::SelectImpl;
92-
use crate::select_column::SelectColumnData;
93-
use crate::select_column::SelectColumnImpl;
94-
use crate::update::Update;
95-
use crate::update::UpdateData;
96-
use crate::update::UpdateImpl;
74+
use crate::select::{Select, SelectData, SelectImpl};
75+
use crate::select_column::{SelectColumnData, SelectColumnImpl};
76+
use crate::update::{Update, UpdateData, UpdateImpl};
9777
use crate::value::Value;
9878

9979
/**
@@ -468,7 +448,7 @@ impl DBImpl {
468448
join_type: JoinType,
469449
table_name: &'until_build str,
470450
join_alias: &'until_build str,
471-
join_condition: &'until_build Condition<'post_query>,
451+
join_condition: Cow<'until_build, Condition<'post_query>>,
472452
) -> JoinTableImpl<'until_build, 'post_query> {
473453
let d = JoinTableData {
474454
join_type,

0 commit comments

Comments
 (0)