diff --git a/README.md b/README.md index def7887..9a00bd5 100644 --- a/README.md +++ b/README.md @@ -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"); diff --git a/docs/examples/UserGuide/key_differences.jl b/docs/examples/UserGuide/key_differences.jl index 77f10fa..de65d71 100644 --- a/docs/examples/UserGuide/key_differences.jl +++ b/docs/examples/UserGuide/key_differences.jl @@ -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 diff --git a/docs/src/index.md b/docs/src/index.md index fce73e3..50db49e 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -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"); diff --git a/src/TidierDB.jl b/src/TidierDB.jl index 28bb685..b0fecaa 100644 --- a/src/TidierDB.jl +++ b/src/TidierDB.jl @@ -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, "") @@ -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:") diff --git a/src/docstrings.jl b/src/docstrings.jl index ea9a556..26398e5 100644 --- a/src/docstrings.jl +++ b/src/docstrings.jl @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); @@ -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"); ``` @@ -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"); ``` @@ -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"); ``` @@ -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: @@ -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:") """ \ No newline at end of file