diff --git a/src/FACT_air.jl b/src/FACT_air.jl index 52634241ad10bf8f416ec2612bd52a531d47002a..108447f0049281d25fa70c82f11f08dfdbb8b55b 100644 --- a/src/FACT_air.jl +++ b/src/FACT_air.jl @@ -32,7 +32,13 @@ function eu_air(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -72,7 +78,6 @@ This function queries a database for air traffic information, such as the number This example queries air traffic data for specified U.S. regions and returns the results in a DataFrame. """ function us_air(conn_dict::Dict, selection::Dict) - # getting valuable info from dictionary: acceptable years are 1961, 71, 81, 91, 2001, 2011 geo_id = selection["geo_id"] shape_obj = selection["shape_obj"] @@ -85,7 +90,13 @@ function us_air(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty diff --git a/src/FACT_bldgs.jl b/src/FACT_bldgs.jl index ae8ad285544e9139b9df2d6279e8426ed1da28d4..6b76ac0aef98cea6f8727efe0774e9f7907ffe09 100644 --- a/src/FACT_bldgs.jl +++ b/src/FACT_bldgs.jl @@ -34,8 +34,21 @@ function footprint_avg_height(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) - result2 = query_connection(conn, query2) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query2) + catch ex + @error "Failed to set session variables for query $query2 with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # execute diff --git a/src/FACT_jobs.jl b/src/FACT_jobs.jl index 91be5cf8179d47938ccf76fb391af7a7b715bdc0..070dd5e14ec5ee8fbfaa1ab5f381da3fc125a9b7 100644 --- a/src/FACT_jobs.jl +++ b/src/FACT_jobs.jl @@ -37,7 +37,13 @@ function us_lodes(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) long_df = stack(result, names(result), variable_name=:industry, value_name=:jobs) @@ -103,7 +109,13 @@ function us_qcew(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the 'industry' column exists @@ -148,7 +160,13 @@ function eu_lfs(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) if !("industry" in names(result)) @@ -192,7 +210,13 @@ function eu_sbs(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) if !("industry" in names(result)) @@ -236,7 +260,13 @@ function eu_rea(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) if !("industry" in names(result)) diff --git a/src/FACT_mine.jl b/src/FACT_mine.jl index 795e447f7f461455ade86817cdfced5cbb589cf7..64ee8f44a2e4a5fb66f30612d4da5b5131a5bee0 100644 --- a/src/FACT_mine.jl +++ b/src/FACT_mine.jl @@ -21,9 +21,6 @@ This example retrieves geology data for two geographic areas in the "US" region """ function geology_full(conn_dict::Dict, selection::Dict) - # temporarily increase max_allowed_packet - size_query = "SET GLOBAL max_allowed_packet=1073741824;" #Sets max_allowed_packet to 1GB - # getting valuable info from dictionary geo_id = selection["geo_id"] shape_obj = selection["shape_obj"] @@ -66,8 +63,13 @@ function geology_full(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - DBInterface.execute(conn, size_query) - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -123,7 +125,14 @@ function minerals_full(conn_dict::Dict, selection::Dict) for table in tables # prepare query query = "SELECT SUM(ST_Area(ST_Intersection(SHAPE, ST_GeomFromText('$shape')))) / $ar AS $table FROM $table WHERE ST_Intersects(SHAPE, ST_GeomFromText('$shape'));" - result2 = query_connection(conn, query) + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end result = hcat(result, result2) end # close connection diff --git a/src/FACT_population.jl b/src/FACT_population.jl index dc45a05917cc5d8bf3325d08072a9e1354134808..554b5a06a617f4d2f33ec241e8425af87793b6c3 100644 --- a/src/FACT_population.jl +++ b/src/FACT_population.jl @@ -34,7 +34,13 @@ function eu_lau(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -86,7 +92,13 @@ function eu_nuts(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -143,7 +155,13 @@ function us_block(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -164,7 +182,13 @@ function us_block(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty @@ -217,7 +241,13 @@ function us_county(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty diff --git a/src/FACT_ports.jl b/src/FACT_ports.jl index 0e30d5c96b7b0dcc651de12e5fb9419735e6fca7..a39d56934cb563653fc0680f6636378a852c7453 100644 --- a/src/FACT_ports.jl +++ b/src/FACT_ports.jl @@ -33,8 +33,21 @@ function eu_ports(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) - result2 = query_connection(conn, query2) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query2) + catch ex + @error "Failed to set session variables for query $query2 with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) result = hcat(result, result2) @@ -87,7 +100,13 @@ function us_ports(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) # Check if the result is empty diff --git a/src/FACT_power.jl b/src/FACT_power.jl index f6d169d31cd7f641902c86fb645475e407f51e33..ad2ef75d7ac5cb5888121062eed4b2ee0419ef42 100644 --- a/src/FACT_power.jl +++ b/src/FACT_power.jl @@ -89,8 +89,21 @@ function us_power(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) - result2 = query_connection(conn, query2) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query2) + catch ex + @error "Failed to set session variables for query $query2 with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) result = hcat(result, result2) diff --git a/src/FACT_rail.jl b/src/FACT_rail.jl index 2c615acf587a802f3f61280cc6b7bf0c29959eee..2138048f923f4ecf84ca2dcf3cc41d13b3124c14 100644 --- a/src/FACT_rail.jl +++ b/src/FACT_rail.jl @@ -33,8 +33,21 @@ function eu_rail(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) - result2 = query_connection(conn, query2) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query2) + catch ex + @error "Failed to set session variables for query $query2 with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) result = hcat(result, result2) @@ -88,8 +101,21 @@ function us_rail(conn_dict::Dict, selection::Dict) # create connection conn = establish_connection(conn_dict["host"], conn_dict["user"], conn_dict["password"], conn_dict["database"]; port=conn_dict["port"]) # execute - result = query_connection(conn, query) - result2 = query_connection(conn, query2) + result = DataFrame() + try + # Execute session variable adjustments + result = query_connection(conn, query) + catch ex + @error "Failed to set session variables for query $query with expection " exception=(ex, catch_backtrace()) + end + # execute + result2 = DataFrame() + try + # Execute session variable adjustments + result2 = query_connection(conn, query2) + catch ex + @error "Failed to set session variables for query $query2 with expection " exception=(ex, catch_backtrace()) + end # close connection close_connection(conn) result = hcat(result, result2) diff --git a/src/utils_DB_connection.jl b/src/utils_DB_connection.jl index 58d0e12e9f694a07fa253603bcc85da8147a7872..d951005609549a864feaeb904bffdc3f1cdd6eb9 100644 --- a/src/utils_DB_connection.jl +++ b/src/utils_DB_connection.jl @@ -14,7 +14,33 @@ Establish a connection to a MySQL/MariaDB database. - `MySQL.Connection`: A connection object to the database. """ function establish_connection(host::String, user::String, password::String, dbname::String; port::Int=3306) + # Establish connection conn = MySQL.Connection(host, user, password, dbname, port, "nothing") + # Temporarily increase max_allowed_packet + size_query = "SET SESSION max_allowed_packet=1073741824;" # Sets max_allowed_packet to 1GB + timeout_query = "SET SESSION wait_timeout = 31536000;" # Sets wait_timeout to 1 year + maxtime_query = "SET SESSION max_execution_time = 604800000;" # Sets max_execution_time to 1 week + try + # Execute session variable adjustments + DBInterface.execute(conn, size_query) + catch ex + @error "Failed to set session variables for query $size_query with expection " exception=(ex, catch_backtrace()) + # Handle error, possibly rethrow or clean up + end + try + # Execute session variable adjustments + DBInterface.execute(conn, timeout_query) + catch ex + @error "Failed to set session variables for query $timeout_query with expection " exception=(ex, catch_backtrace()) + # Handle error, possibly rethrow or clean up + end + try + # Execute session variable adjustments + DBInterface.execute(conn, maxtime_query) + catch ex + @error "Failed to set session variables for query $maxtime_query with expection " exception=(ex, catch_backtrace()) + # Handle error, possibly rethrow or clean up + end return conn end @@ -39,6 +65,7 @@ Each column in the DataFrame is of type `String`. - It converts all columns in the query result to `String` to avoid type interpretation issues. """ function query_connection(conn::MySQL.Connection, query::String) + #println("Executing query: ", query) cursor = DBInterface.execute(conn, query) cursor.types = [String for _ in cursor.types] rows = Tables.rows(cursor)