pub trait QueryBuilder {
// Required methods
fn select(&self, table: &str, columns: Vec<&str>) -> SelectProps;
fn update(&self, table: &str) -> UpdateProps;
fn insert<T: ToSQLData>(
&self,
table: &str,
data: Vec<Vec<T>>,
) -> Result<InsertProps, Error>;
fn create(&self) -> CreateProps;
fn alter(&self) -> AlterProps;
fn delete(&self, table: &str) -> DeleteProps;
}Expand description
Trait used for the SQL Database types found in SQLVariation to implement basic SQL queries.
Required Methods§
Sourcefn select(&self, table: &str, columns: Vec<&str>) -> SelectProps
fn select(&self, table: &str, columns: Vec<&str>) -> SelectProps
Creates a new SelectProps to start building out a select query.
For the select method, you add the table you want to select from, then the columns in a vector.
If you want to select all, simply input vec!["*"].
You can add a [where_clause::WhereSelect] to filter out the rows you want, just like writing a SQL query.
let conn = OracleConnect::new(connection_string, username, password)?;
let data: Vec<Vec<SQLDataTypes>> = conn
.select("regional_sales", vec!["product_id", "revenue", "sale_date"])
.where_in("product_id", vec!["1001", "4567"])
.and_not("city", vec!["Austin", "Dallas"])
.build()?;
data.iter().for_each(|row: &Vec<SQLDataTypes>| { println!("{:?}", row) });Is the same as:
SELECT product_id, revenue, sale_date FROM regional_sales
WHERE product_id IN ('1001', '4567')
AND city NOT IN ('Austin', 'Dallas');Sourcefn update(&self, table: &str) -> UpdateProps
fn update(&self, table: &str) -> UpdateProps
Creates a new UpdateProps to start building out an update query.
Updates a table’s column(s) based on criteria set in the optional where clauses. Updates can return Ok() or the number of rows that were updated.
let conn = OracleConnect::new(connection_string, username, password)?;
conn.update("global_sales")
.set("continent", "North America")
.where_in("country", vec!["Canada", "United States", "Mexico"])
.build()?;
// If you want to get the number of rows that were updated
let count: usize = conn
.update("global_sales")
.set("continent", "North America")
.where_in("country", vec!["Canada", "United States", "Mexico"])
.build_return_count()?;Sourcefn insert<T: ToSQLData>(
&self,
table: &str,
data: Vec<Vec<T>>,
) -> Result<InsertProps, Error>
fn insert<T: ToSQLData>( &self, table: &str, data: Vec<Vec<T>>, ) -> Result<InsertProps, Error>
Creates a new InsertProps to start building out an insert query.
Inserts a grid (two-dimensional vector) of data into your database.
Can take any type that has the ToSQLData trait implemented.
If the table does not exist, it will automatically create a new table (will have an abort option in a future update).
The first row should be the header.
let conn = OracleConnect::new(connection_string, username, password)?;
let data: Vec<Vec<&str>> = vec![
vec!["Column_A", "Column_B", "Column_C"],
vec!["a1", "b1", "c1"],
vec!["a2", "b2", "c2"],
vec!["a3", "b3", "c3"],
];
conn.insert("my_table", data)?.build()?;Sourcefn create(&self) -> CreateProps
fn create(&self) -> CreateProps
Creates a new CreateProps to start building a create query.
Creates a table using a vector of the CreateColumns struct and the CreateDataTypes to apply the correct types to the new columns.
let conn = OracleConnect::new(connection_string, username, password)?;
let columns = vec![
CreateColumns{ name: "Column_A".to_string(), data_type: CreateDataTypes::VARCHAR(20 as usize) },
CreateColumns{ name: "Column_B".to_string(), data_type: CreateDataTypes::NUMBER },
CreateColumns{ name: "Column_C".to_string(), data_type: CreateDataTypes::FLOAT },
];
conn.create()
.table("my_table", columns)
.build()?;You can add a column after you initiated the create table process.
let my_table: CreateTable = conn.create()
.table("my_table", columns);
if add_date_col == true {
my_table.add_column("Column_D".to_string(), CreateDataTypes::DATE);
}
my_table.build()?;Sourcefn alter(&self) -> AlterProps
fn alter(&self) -> AlterProps
Creates a new AlterProps to start the process of altering a table or column(s).
let conn = OracleConnect::new(connection_string, username, password)?;
conn.alter()
.table("local_sales")
.rename("regional_sales")
.build()?;Sourcefn delete(&self, table: &str) -> DeleteProps
fn delete(&self, table: &str) -> DeleteProps
Creates a new DeleteProps which allows you delete rows based on criteria passed in the where methods added to the struct.
Will delete everything in the table if no where clause added.
let conn = OracleConnect::new(connection_string, username, password)?;
conn.delete("my_table")
.where_null("Column_A")
.build()?Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.