Hi Junior, Just wanted to reply directly to the thread - your fix is now out in version 4.2.0-incubating. Hope to hear more from your end later.
Best, Kasper 2014-07-18 14:23 GMT+02:00 Júnior <[email protected]>: > Hi Kasper, > > You are welcome. I'm using the library for some tasks, any other problem > I'll let you know. > > Thanks, > Junior > > > 2014-07-18 5:22 GMT-03:00 Kasper Sørensen <[email protected] > >: > > > Hi Junior, > > > > I just committed/pushed the fix now. Thank you a ton for your > contribution! > > > > Kasper > > > > > > 2014-07-17 17:03 GMT+02:00 Kasper Sørensen < > [email protected] > > >: > > > > > We still need a bit of finishing off on the next MetaModel release, so > I > > > would say a few weeks at least. > > > > > > Mentors, is there a way we can make a kind of promoted build or > something > > > like that? I guess when contributors like Junior has an addition and it > > is > > > validated, they would like to be able to consume it as soon as > possible? > > > > > > > > > 2014-07-17 15:22 GMT+02:00 Júnior <[email protected]>: > > > > > > It looks nice to me :) > > >> > > >> When do you think this could be available on maven central > reppository? > > >> > > >> Thanks, > > >> Junior > > >> > > >> > > >> 2014-07-17 10:16 GMT-03:00 Kasper Sørensen < > > >> [email protected]>: > > >> > > >> > Hi Junior, > > >> > > > >> > I guess the test is now breaking because there are two columns, but > > you > > >> > assert that there are none. I think actually your fix worked, but > the > > >> > unittest is invalid. > > >> > > > >> > I rewrote the test to do these assertions, which work and to me > looks > > >> > correct: > > >> > > > >> > public void testEmptyFileNoColumnHeaderLine() throws Exception { > > >> > final File file = new > > >> > File("target/testEmptyFileNoColumnHeaderLine.csv"); > > >> > FileHelper.copy(new > File("src/test/resources/empty_file.csv"), > > >> > file); > > >> > > > >> > CsvConfiguration csvConfiguration = new > > >> > CsvConfiguration(CsvConfiguration.NO_COLUMN_NAME_LINE, > > >> > FileHelper.DEFAULT_ENCODING, > > >> > CsvConfiguration.DEFAULT_SEPARATOR_CHAR, > CsvConfiguration.NOT_A_CHAR, > > >> > CsvConfiguration.DEFAULT_ESCAPE_CHAR); > > >> > final CsvDataContext dc = new CsvDataContext(file, > > >> > csvConfiguration); > > >> > assertEquals(1, dc.getDefaultSchema().getTableCount()); > > >> > > > >> > dc.executeUpdate(new UpdateScript() { > > >> > > > >> > @Override > > >> > public void run(UpdateCallback callback) { > > >> > callback.createTable(dc.getDefaultSchema(), > > >> > "new_table").withColumn("COL_1").withColumn("COL_2") > > >> > .execute(); > > >> > callback.insertInto("new_table").value(0, > > "1").value(1, > > >> > 2).execute(); > > >> > } > > >> > }); > > >> > > > >> > CsvDataContext dc1 = new CsvDataContext(file, > > csvConfiguration); > > >> > > > >> > Table[] tables = dc1.getDefaultSchema().getTables(); > > >> > assertEquals(1, tables.length); > > >> > > > >> > Table table = tables[0]; > > >> > assertEquals("testEmptyFileNoColumnHeaderLine.csv", > > >> > table.getName()); > > >> > assertEquals(2, table.getColumnCount()); > > >> > > > >> > DataSet ds = dc1.query().from(table).selectAll().execute(); > > >> > assertTrue(ds.next()); > > >> > assertEquals("Row[values=[1, 2]]", ds.getRow().toString()); > > >> > assertFalse(ds.next()); > > >> > ds.close(); > > >> > } > > >> > > > >> > What do you think? > > >> > > > >> > > > >> > 2014-07-17 14:48 GMT+02:00 Júnior <[email protected]>: > > >> > > > >> > > Hi Kasper, > > >> > > > > >> > > After some fight, I was able to write on an empty CSV, I needed to > > >> change > > >> > > the : > > >> > > CsvCreateTableBuilder.java > > >> > > > > >> > > public Table execute() { > > >> > > CsvUpdateCallback csvUpdateCallback = getUpdateCallback(); > > >> > > > > >> > > MutableTable table = getTable(); > > >> > > String[] columnNames = table.getColumnNames(); > > >> > > > > >> > > CsvDataContext csvDataContext = > > >> > > (CsvDataContext)csvUpdateCallback.getDataContext(); > > >> > > > > >> > > > > >> if(csvDataContext.getConfiguration().getColumnNameLineNumber() != > > >> > > CsvConfiguration.NO_COLUMN_NAME_LINE) { > > >> > > csvUpdateCallback.writeRow(columnNames, false); > > >> > > } > > >> > > > > >> > > CsvSchema schema = (CsvSchema) table.getSchema(); > > >> > > CsvTable csvTable = new CsvTable(schema, table.getName(), > > >> > > table.getColumnNames()); > > >> > > schema.setTable(csvTable); > > >> > > return csvTable; > > >> > > } > > >> > > > > >> > > > > >> > > Then I've changed the > > >> > > > > >> > > CsvDataContextTest.testEmptyFile > > >> > > > > >> > > public void testEmptyFile() throws Exception { > > >> > > CsvConfiguration csvConfiguration = > > >> > > new CsvConfiguration(CsvConfiguration.NO_COLUMN_NAME_LINE, > > >> > > FileHelper.DEFAULT_ENCODING, > > CsvConfiguration.DEFAULT_SEPARATOR_CHAR, > > >> > > CsvConfiguration.NOT_A_CHAR, > > >> > > CsvConfiguration.DEFAULT_ESCAPE_CHAR); > > >> > > final CsvDataContext dc = new CsvDataContext(new > > >> > > File("src/test/resources/empty_file.csv"), csvConfiguration); > > >> > > assertEquals(1, dc.getDefaultSchema().getTableCount()); > > >> > > > > >> > > dc.executeUpdate(new UpdateScript() { > > >> > > > > >> > > @Override > > >> > > public void run(UpdateCallback callback) { > > >> > > > > >> > callback.createTable(dc.getDefaultSchema(), > > >> > > "new_table").withColumn("COL_1").withColumn("COL_2").execute(); > > >> > > > > >> callback.insertInto("new_table").value(0, > > >> > > "1").value(1, 2).execute(); > > >> > > } > > >> > > }); > > >> > > CsvDataContext dc1 = new CsvDataContext(new > > >> > > File("src/test/resources/empty_file.csv"), csvConfiguration); > > >> > > > > >> > > > > >> > > > >> > > > System.out.println(dc1.query().from("empty_file.csv").selectAll().execute().toRows().size()); > > >> > > > > >> > > Table table = dc1.getDefaultSchema().getTables()[0]; > > >> > > assertEquals("empty_file.csv", table.getName()); > > >> > > assertEquals(0, table.getColumnCount()); > > >> > > } > > >> > > > > >> > > > > >> > > The test is breaking, but it wrote the lines in the empty csv. > > >> > > > > >> > > One thing I notice is that when we call the dropTable, if the > > >> > > DataContext was created pointing to a file, it simply delete the > > file, > > >> > > and that's the why I'm not calling it. > > >> > > > > >> > > Do you think it is working as expected after this change? > > >> > > > > >> > > Thanks, > > >> > > > > >> > > Junior > > >> > > > > >> > > > > >> > > > > >> > > 2014-07-16 18:29 GMT-03:00 Kasper Sørensen < > > >> > [email protected] > > >> > > >: > > >> > > > > >> > > > I think you're right about that. Would you be able to maybe give > > it > > >> a > > >> > > shot? > > >> > > > We can add a unittest for this particular case to show if it > > works. > > >> > > > > > >> > > > > > >> > > > 2014-07-16 23:26 GMT+02:00 Júnior <[email protected]>: > > >> > > > > > >> > > > > As I could see it is not possible to create without header > > >> because of > > >> > > > this > > >> > > > > line on CsvCreateTableBuilder: > > >> > > > > > > >> > > > > csvUpdateCallback.writeRow(columnNames, false); > > >> > > > > > > >> > > > > on execute method, it is always creating the header column, > > maybe > > >> > just > > >> > > a > > >> > > > if > > >> > > > > before that would fix that > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > 2014-07-16 18:22 GMT-03:00 Kasper Sørensen < > > >> > > > [email protected] > > >> > > > > >: > > >> > > > > > > >> > > > > > I'm just now simultaniously looking into the MM csv code > ... I > > >> get > > >> > > the > > >> > > > > > feeling you're maybe a bit in untested territory. At least > it > > >> seems > > >> > > > that > > >> > > > > > CsvDataContextTest does not exhibit a lot of test cases > around > > >> > having > > >> > > > no > > >> > > > > > column headers ... Might be we need your feedback here if > > there > > >> are > > >> > > > > issues. > > >> > > > > > > > >> > > > > > > > >> > > > > > 2014-07-16 23:19 GMT+02:00 Kasper Sørensen < > > >> > > > > [email protected] > > >> > > > > > >: > > >> > > > > > > > >> > > > > > > Ah, you want a header-less CSV file? You then need to > > >> instantiate > > >> > > > your > > >> > > > > > > CsvDataContext with a CsvConfiguration that > > >> > > > > > > specifies CsvConfiguration.NO_COLUMN_NAME_LINE as the > > >> > > > > > > 'columnNameLineNumber' property. If you otherwise want > > >> defaults, > > >> > > that > > >> > > > > > would > > >> > > > > > > be like this: > > >> > > > > > > > > >> > > > > > > new > CsvConfiguration(CsvConfiguration.NO_COLUMN_NAME_LINE); > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > 2014-07-16 23:14 GMT+02:00 Júnior <[email protected]>: > > >> > > > > > > > > >> > > > > > > Right, what I'd like to know is to create the table > without > > >> the > > >> > > > > header, I > > >> > > > > > >> think the only way would be changing the > > >> CsvCreateTableBuilder. > > >> > > > > > >> Thanks, > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> 2014-07-16 18:12 GMT-03:00 Kasper Sørensen < > > >> > > > > > >> [email protected]>: > > >> > > > > > >> > > >> > > > > > >> > Hmm actually I just now realized that you can > completely > > >> omit > > >> > > the > > >> > > > > Drop > > >> > > > > > >> > Table part ... if you use create table on an empty > file, > > it > > >> > will > > >> > > > > > simply > > >> > > > > > >> > create the header. > > >> > > > > > >> > > > >> > > > > > >> > > > >> > > > > > >> > 2014-07-16 23:10 GMT+02:00 Kasper Sørensen < > > >> > > > > > >> [email protected] > > >> > > > > > >> > >: > > >> > > > > > >> > > > >> > > > > > >> > > Yes, you do that while creating the table. Like this: > > >> > > > > > >> > > > > >> > > > > > >> > > CsvDataContext dc = ...; > > >> > > > > > >> > > dc.executeUpdate(new UpdateScript() { > > >> > > > > > >> > > @Override > > >> > > > > > >> > > public void run(UpdateCallback callback) > { > > >> > > > > > >> > > > > >> > > > > > callback.dropTable(dc.getDefaultSchema().getTable(0)); > > >> > > > > > >> > > > > >> > > > > > >> > > > > >> callback.createTable(dc.getDefaultSchema(), > > >> > > > > > >> > > > > >> "newtable").withColumn("foo").withColumn("bar").execute(); > > >> > > > > > >> > > } > > >> > > > > > >> > > }); > > >> > > > > > >> > > > > >> > > > > > >> > > (replace with your own column names of course) > > >> > > > > > >> > > > > >> > > > > > >> > > > > >> > > > > > >> > > 2014-07-16 23:04 GMT+02:00 Júnior < > [email protected] > > >: > > >> > > > > > >> > > > > >> > > > > > >> > > Hi Kasper, > > >> > > > > > >> > >> > > >> > > > > > >> > >> thanks for your reply, but what about the columns? > > >> > > > > > >> > >> > > >> > > > > > >> > >> Do I need to add columns to this newly created > table? > > >> > > > > > >> > >> > > >> > > > > > >> > >> Att. > > >> > > > > > >> > >> > > >> > > > > > >> > >> > > >> > > > > > >> > >> 2014-07-16 18:00 GMT-03:00 Kasper Sørensen < > > >> > > > > > >> > >> [email protected]>: > > >> > > > > > >> > >> > > >> > > > > > >> > >> > Hi there, > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > There is a little known trick to get around that > > >> issue, > > >> > so > > >> > > I > > >> > > > > > guess > > >> > > > > > >> > it's > > >> > > > > > >> > >> a > > >> > > > > > >> > >> > very fair question. > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > The trick is to first do a drop table, and then a > > new > > >> > > create > > >> > > > > > table. > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > When MM is initialized with an existing empty > file, > > it > > >> > will > > >> > > > > > >> determine > > >> > > > > > >> > >> that > > >> > > > > > >> > >> > there IS a table, since the file is there, but > that > > >> table > > >> > > has > > >> > > > > no > > >> > > > > > >> > >> columns, > > >> > > > > > >> > >> > because the file does not define any columns. > Maybe > > >> it's > > >> > a > > >> > > > bit > > >> > > > > > >> silly > > >> > > > > > >> > - I > > >> > > > > > >> > >> > actually think that's worth discussing ... But the > > >> reason > > >> > > it > > >> > > > is > > >> > > > > > >> there > > >> > > > > > >> > >> is I > > >> > > > > > >> > >> > guess to indicate that at least the file is there, > > >> it's > > >> > > not a > > >> > > > > > >> > >> non-existing > > >> > > > > > >> > >> > file (in which case there would not be any table). > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > Best regards, > > >> > > > > > >> > >> > Kasper > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > 2014-07-16 21:37 GMT+02:00 Júnior < > > >> [email protected]>: > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > > Hi, > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > I'm trying to use the metamodel to write on an > > empty > > >> > csv, > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > But I'm getting errors saying that there is no > > >> column. > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > I was able to do that calling create table with > a > > >> > > different > > >> > > > > > name > > >> > > > > > >> > from > > >> > > > > > >> > >> the > > >> > > > > > >> > >> > > file. > > >> > > > > > >> > >> > > Then added the columns. > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > I worked, but it created the header line with > the > > >> > column > > >> > > > > names, > > >> > > > > > >> > would > > >> > > > > > >> > >> it > > >> > > > > > >> > >> > be > > >> > > > > > >> > >> > > possible to do that without adding the column > > names > > >> in > > >> > > the > > >> > > > > csv > > >> > > > > > >> file? > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > Att. > > >> > > > > > >> > >> > > -- > > >> > > > > > >> > >> > > Francisco Ribeiro > > >> > > > > > >> > >> > > *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > > >> > >> > > > > >> > > > > > >> > >> > > > >> > > > > > >> > >> > > >> > > > > > >> > >> > > >> > > > > > >> > >> > > >> > > > > > >> > >> -- > > >> > > > > > >> > >> Francisco Ribeiro > > >> > > > > > >> > >> *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > > >> > >> > > >> > > > > > >> > > > > >> > > > > > >> > > > > >> > > > > > >> > > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> > > >> > > > > > >> -- > > >> > > > > > >> Francisco Ribeiro > > >> > > > > > >> *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > > >> > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > -- > > >> > > > > Francisco Ribeiro > > >> > > > > *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > -- > > >> > > Francisco Ribeiro > > >> > > *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > >> > > > >> > > >> > > >> > > >> -- > > >> Francisco Ribeiro > > >> *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* > > >> > > > > > > > > > > > > -- > Francisco Ribeiro > *SCEA|SCJP|SCWCD|IBM Certified SOA Associate* >
