Skip to content

Commit

Permalink
makes connect auto set mode, adds connect to docs/docstrings
Browse files Browse the repository at this point in the history
  • Loading branch information
drizk1 committed Apr 25, 2024
1 parent 59d4dc0 commit f7b6978
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 78 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@ Even though the code reads similarly to TidierData, note that no computational w
using TidierData
import TidierDB as DB

mem = DB.duckdb_open(":memory:");
db = DB.duckdb_connect(mem);
db = DB.connect(:duckdb);
path = "https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv"
DB.copy_to(db, path, "mtcars");

Expand Down
3 changes: 1 addition & 2 deletions docs/examples/UserGuide/key_differences.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);

mem = duckdb_open(":memory:");
db = duckdb_connect(mem);
db = connect(:duckdb)

copy_to(db, df, "df_mem"); # copying over the data frame to an in-memory database

Expand Down
3 changes: 1 addition & 2 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,7 @@ Even though the code reads similarly to TidierData, note that no computational w
using TidierData
import TidierDB as DB

mem = DB.duckdb_open(":memory:");
db = DB.duckdb_connect(mem);
db = DB.connect(:duckdb);
path = "https://gist.githubusercontent.com/seankross/a412dfbd88b3db70b74b/raw/5f23f993cd87c283ce766e7ac6b329ee7cc2e1d1/mtcars.csv"
DB.copy_to(db, path, "mtcars");

Expand Down
11 changes: 8 additions & 3 deletions src/TidierDB.jl
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,8 @@ $docstring_connect
"""
function connect(backend::Symbol; kwargs...)
if backend == :MySQL || backend == :mysql
set_sql_mode(:mysql)

# Required parameters by MySQL.jl: host and user
host = get(kwargs, :host, "localhost")
user = get(kwargs, :user, "")
Expand All @@ -303,23 +305,26 @@ function connect(backend::Symbol; kwargs...)
db = get(kwargs, :db, nothing)
port = get(kwargs, :port, nothing)
return DBInterface.connect(MySQL.Connection, host, user, password; db=db, port=port)
elseif backend == :LibPQ || backend == :libpq
elseif backend == :Postgres || backend == :postgres
set_sql_mode(:postgres)
# Construct a connection string from kwargs for LibPQ
conn_str = join(["$(k)=$(v)" for (k, v) in kwargs], " ")
return LibPQ.Connection(conn_str)
elseif backend == :MsSQL || backend == :mssql
set_sql_mode(:mssql)
# Construct a connection string for ODBC if required for MsSQL
conn_str = join(["$(k)=$(v)" for (k, v) in kwargs], ";")
return ODBC.Connection(conn_str)
elseif backend == :Clickhouse || backend == :clickhouse
# Ensure host and port are specified for ClickHouse
set_sql_mode(:clickhouse)
if haskey(kwargs, :host) && haskey(kwargs, :port)
return ClickHouse.connect(kwargs[:host], kwargs[:port]; (k => v for (k, v) in kwargs if k [:host, :port])...)
else
throw(ArgumentError("Missing required positional arguments 'host' and 'port' for ClickHouse."))
end
elseif backend == :SQLite || backend == :lite
db_path = get(kwargs, :db, ":memory:") # Default to in-memory database if not specified
db_path = get(kwargs, :db, ":memory:")
set_sql_mode(:lite)
return SQLite.DB(db_path)
elseif backend == :DuckDB || backend == :duckdb
mem = DuckDB.open(":memory:")
Expand Down
94 changes: 25 additions & 69 deletions src/docstrings.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -83,9 +81,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -139,9 +135,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -175,9 +169,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -218,9 +210,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -267,9 +257,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -319,9 +307,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -362,9 +348,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -403,9 +387,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -439,9 +421,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -483,9 +463,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -521,9 +499,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -590,9 +566,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -645,9 +619,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -697,9 +669,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -746,9 +716,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -803,9 +771,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -853,9 +819,7 @@ julia> df2 = DataFrame(id2 = ["AA", "AC", "AE", "AG", "AI", "AK", "AM"],
category = ["X", "Y", "X", "Y", "X", "Y", "X"],
score = [88, 92, 77, 83, 95, 68, 74]);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -895,9 +859,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
Expand Down Expand Up @@ -938,9 +900,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "test");
```
Expand All @@ -962,9 +922,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
```
Expand All @@ -988,9 +946,7 @@ julia> df = DataFrame(id = [string('A' + i ÷ 26, 'A' + i % 26) for i in 0:9],
value = repeat(1:5, 2),
percent = 0.1:0.1:1.0);
julia> mem = duckdb_open(":memory:");
julia> db = duckdb_connect(mem);
julia> db = connect(:duckdb);
julia> copy_to(db, df, "df_mem");
```
Expand All @@ -1000,7 +956,7 @@ const docstring_connect =
"""
connect(backend::Symbol; kwargs...)
This function establishes a database connection based on the specified backend and connection parameters.
This function establishes a database connection based on the specified backend and connection parameters and sets the SQL mode
# Arguments
- `backend`: A symbol specifying the database backend to connect to. Supported backends are:
Expand All @@ -1021,12 +977,12 @@ This function establishes a database connection based on the specified backend a
# Connect to MySQL
# conn = connect(:mysql; host="localhost", user="root", password="password", db="mydb")
# Connect to PostgreSQL using LibPQ
# conn = connect(:libpq; host="localhost", dbname="mydb", user="postgres", password="password")
# conn = connect(:postgres; host="localhost", dbname="mydb", user="postgres", password="password")
# Connect to ClickHouse
# conn = connect(:clickhouse; host="localhost", port=9000, database="mydb", user="default", password="")
# Connect to SQLite
# conn = connect(:lite)
# Connect to DuckDB
julia> conn = connect(:duckdb)
julia> db = connect(:duckdb)
DuckDB.Connection(":memory:")
"""

0 comments on commit f7b6978

Please sign in to comment.