/** * Do a MapReduce-based import of the table and verify that the results were imported as expected. * (tests readFields(ResultSet) and toString()) * * @param expectedVal the value we injected into the table. * @param importCols the columns to import. If null, all columns are used. */ protected void verifyImport(String expectedVal, String[] importCols) { // paths to where our output file will wind up. Path dataFilePath = getDataFilePath(); removeTableDir(); // run the tool through the normal entry-point. int ret; try { Sqoop importer = new Sqoop(); ret = ToolRunner.run(importer, getArgv(true, importCols)); } catch (Exception e) { LOG.error("Got exception running Sqoop: " + e.toString()); e.printStackTrace(); ret = 1; } // expect a successful return. assertEquals("Failure during job", 0, ret); ImportOptions opts = new ImportOptions(); try { opts.parse(getArgv(false, importCols)); } catch (InvalidOptionsException ioe) { fail(ioe.toString()); } CompilationManager compileMgr = new CompilationManager(opts); String jarFileName = compileMgr.getJarFilename(); ClassLoader prevClassLoader = null; try { prevClassLoader = ClassLoaderStack.addJarFile(jarFileName, getTableName()); // now actually open the file and check it File f = new File(dataFilePath.toString()); assertTrue("Error: " + dataFilePath.toString() + " does not exist", f.exists()); Object readValue = SeqFileReader.getFirstValue(dataFilePath.toString()); if (null == expectedVal) { assertEquals("Error validating result from SeqFile", "null", readValue.toString()); } else { assertEquals("Error validating result from SeqFile", expectedVal, readValue.toString()); } } catch (IOException ioe) { fail("IOException: " + ioe.toString()); } finally { if (null != prevClassLoader) { ClassLoaderStack.setCurrentClassLoader(prevClassLoader); } } }
/** Generate the ORM code for the class. */ public void generate() throws IOException { Map<String, Integer> columnTypes = connManager.getColumnTypes(tableName); String[] colNames = options.getColumns(); if (null == colNames) { colNames = connManager.getColumnNames(tableName); } // Generate the Java code StringBuilder sb = generateClassForColumns(columnTypes, colNames); // Write this out to a file. String codeOutDir = options.getCodeOutputDir(); // TODO(aaron): Allow package subdirectory (that goes in sourceFilename). String sourceFilename = tableName + ".java"; String filename = codeOutDir + sourceFilename; LOG.debug("Writing source file: " + filename); LOG.debug("Table name: " + tableName); StringBuilder sbColTypes = new StringBuilder(); for (String col : colNames) { Integer colType = columnTypes.get(col); sbColTypes.append(col + ":" + colType + ", "); } String colTypeStr = sbColTypes.toString(); LOG.debug("Columns: " + colTypeStr); compileManager.addSourceFile(sourceFilename); // Create any missing parent directories. File file = new File(filename); String dirname = file.getParent(); if (null != dirname) { boolean mkdirSuccess = new File(dirname).mkdirs(); if (!mkdirSuccess) { LOG.debug("Could not create directory tree for " + dirname); } } OutputStream ostream = null; Writer writer = null; try { ostream = new FileOutputStream(filename); writer = new OutputStreamWriter(ostream); writer.append(sb.toString()); } finally { if (null != writer) { try { writer.close(); } catch (IOException ioe) { // ignored because we're closing. } } if (null != ostream) { try { ostream.close(); } catch (IOException ioe) { // ignored because we're closing. } } } }