Multiple Dispatch on input file type?

Hi,
I am looking to write some code that starts with loading some data from a file database. I know it will be either an access database or SQLite database. Since the general mechanism is the same with only the connection string changing,if my understanding is correct I can use multiple dispatch to write a generic LoadDB() function that will choose the appropriate method based on input type. This is more an exercise in wrapping my head around how Julia design works than useful code.

I have the code working mechanically, but I am not sure if this is necessary or even appropriate use of multiple dispatch.

I create a holder type for each possible file type. I then have a file check function that creates an instance of whichever type which is then passed to the loading function.

Is this a reasonable way to accommodate file type on input using the type system or am I over complicating things trying to wedge using multiple dispatch in?

My thoughts are that the types I make seem arbitrary just so I can pass them to the loading function. It seems like I could just write a LoadSQLite() and LoadAccess() function separately in just as many lines. Right now I am just working with 2 possibilities, but it seems like it may be more useful in a situation where I had a whole lot of possibilities.

Thank you

Code:

using Gtk 
using SQLite
using ODBC

#make holder types with some file info
type SQLitefile
  path::String
  filename::String
  extension::String
end

type Accessfile
  path::String
  filename::String
  extension::String
end

#load functions with conn. strings
function LoadInputDB(x::Accessfile) #add pass file by variable later...
  cnxn_str=ODBC.DSN("Driver={Microsoft Access Driver (*.mdb, *.accdb)};
  DBQ=C:Users/Path/To/Scrap.accdb")
  somedata=ODBC.query(cnxn_str,"SELECT * FROM Table1")
end

function LoadInputDB(x::SQLitefile)
  db = SQLite.DB("Scrap.db")
  somedata= SQLite.query(db,"SELECT * FROM Table1")
end

# initial file check logic
function FindType()
  x=open_dialog("Pick a winner",multiple=true)
  if splitext(x)[2] == ".db"
    infile=SQLitefile(dirname(x),basename(x),splitext(x)[2])
  elseif splitext(x)[2] == ".mdb" || splitext(x)[2] == ".accdb"
    infile=Accessfile(dirname(x),basename(x),splitext(x)[2])
  end
end

LoadInputDB(FindType()) 
2 Likes