diff --git a/lib/mosql/cli.rb b/lib/mosql/cli.rb index a16450d..c8f39d6 100644 --- a/lib/mosql/cli.rb +++ b/lib/mosql/cli.rb @@ -91,6 +91,10 @@ def parse_args @options[:skip_import] = true end + opts.on("--schema-only", "Only import schema without data") do + @options[:schema_only] = true + end + opts.on("--reimport", "Force a data re-import") do @options[:reimport] = true end @@ -169,12 +173,16 @@ def run :sql => @sql, :schema => @schema) - unless options[:skip_import] - @streamer.import - end + unless options[:schema_only] + unless options[:skip_import] + @streamer.import + end - unless options[:skip_tail] - @streamer.optail + unless options[:skip_tail] + @streamer.optail + end + else + @streamer.import_schema end end end diff --git a/lib/mosql/schema.rb b/lib/mosql/schema.rb index e8dd70a..202bb80 100644 --- a/lib/mosql/schema.rb +++ b/lib/mosql/schema.rb @@ -76,13 +76,17 @@ def initialize(map) end def create_schema(db, clobber=false) + log.info("Creating schema and tables...") + unless clobber + log.info("Not dropping existing tables given no-drop-tables option...") + end @map.values.each do |dbspec| dbspec.each do |n, collection| next unless n.is_a?(String) meta = collection[:meta] composite_key = meta[:composite_key] keys = [] - log.info("Creating table '#{meta[:table]}'...") + log.info("Creating table '#{meta[:table]}' if needed...") db.send(clobber ? :create_table! : :create_table?, meta[:table]) do collection[:columns].each do |col| opts = {} diff --git a/lib/mosql/streamer.rb b/lib/mosql/streamer.rb index d630e96..f29d322 100644 --- a/lib/mosql/streamer.rb +++ b/lib/mosql/streamer.rb @@ -29,6 +29,10 @@ def import end end + def import_schema + @schema.create_schema(@sql.db, !options[:no_drop_tables]) + end + def collection_for_ns(ns) dbname, collection = ns.split(".", 2) @mongo.db(dbname).collection(collection)