// +------------------------------------+ +------------------------------------+
// |PUBLISHER | |BOOK |
// +------------------------------------+ +------------------------------------+
// |ID CHAR(2) PRIMARY KEY----->PUBLISHER CHAR(2) PRIMARY KEY|
// |NAME VARCHAR(256) NOT NULL | |ID CHAR(3) PRIMARY KEY|
// |VOLUMES INTEGER NOT NULL | |TITLE VARCHAR(256) NOT NULL |
// |UPDATE_DATE TIMESTAMP NOT NULL | |AUTHOR VARCHAR(256) NULL |
// |CREATE_DATE TIMESTAMP NOT NULL | |ISSUE_DATE DATE NULL |
// +------------------------------------+ |UPDATE_DATE TIMESTAMP NOT NULL |
// |CREATE_DATE TIMESTAMP NOT NULL |
// +------------------------------------+
public class Main {
public static void main(String[] args) {
connect();
Runner runner = new Runner(Main.class, "sample_");
runner.run();
disconnect();
}
/////////////////////////////////////////////////////////////////
private static void connect() {
DatabaseManager.setConnector(new Connector() {
public TransactedDatabase connect() throws SQLRuntimeException {
RubbishDatabase dbh = new RubbishDatabase(new HsqldbExceptionFactory());
dbh.setLogging(true);
dbh.connect("jdbc:hsqldb:hsql://localhost", "sa", "");
dbh.setAutoCommit(false);
return dbh;
}
});
Publisher.addTrigger(new BeforeCreate() {
public void execute(Timing timing, Event event, ActiveRecord row, Database dbh) {
System.out.println(">>>>> BEFORE PUBLISHER CREATE => " + row);
}
});
}
private static void disconnect() {
DatabaseManager.rollback();
DatabaseManager.disconnect();
}
private void puts(Object x) {
System.out.println(x);
}
private void puts_table(Object[] rows) {
System.out.println(new TabularFormat(rows));
}
//---------------------------------------------------------------
public void sample_find() throws Exception {
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM PUBLISHER WHERE ID = ? [01]
Publisher publisher = Publisher.find("ID = ?", "01");
puts(publisher);
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE FROM BOOK WHERE ( BOOK.PUBLISHER = ? ) [01]
Book[] books = Book.findAny(Book.PUBLISHER.eq("01"));
for (int i = 0; i < books.length; i++)
puts(books[i]);
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM PUBLISHER
Publisher.findAny(new ObjectHandler() {
public void handle(Object row) {
Publisher publisher = (Publisher) row;
puts(publisher.getId() + ": " + publisher.getName());
};
});
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM PUBLISHER
Publisher.findAny(new Handler() {
public void handle(Publisher publisher) {
puts(publisher.getId() + ": " + publisher.getName());
};
});
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE FROM BOOK WHERE ( BOOK.PUBLISHER >= ? ) AND ( BOOK.ID BETWEEN ? AND ? ) ORDER BY BOOK.TITLE [04, 001, 003]
Book.findAny(Book.PUBLISHER.ge("04").and(Book.ID.between("001", "003")).order_by(Book.TITLE), new ObjectHandler() {
public void handle(Object row) {
Book book = (Book) row;
puts(book.getPublisher() + ": " + book.getTitle());
}
});
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM PUBLISHER WHERE ( VOLUMES = ? ) [4]
Publisher[] publishers = Publisher.findAny(new MapHandler() {
public void handle(Map conditions) {
conditions.put(Publisher.VOLUMES, new Integer(4));
};
});
for (int i = 0; i < publishers.length; i++)
puts(publishers[i]);
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_save_update() throws Exception {
puts_table(Publisher.findAny(Publisher.ID.order_by()));
// UPDATE PUBLISHER SET NAME = ? WHERE ( VOLUMES = ? ) AND ( UPDATE_DATE = ? ) AND ( NAME = ? ) AND ( ID = ? ) AND ( CREATE_DATE = ? ) [XXXXX, 4, 2005-07-10 17:10:00.000, Eigakukan, 01, 1999-07-10 17:10:00.000]
Publisher publisher = Publisher.findByPK("01");
publisher.setName("XXXXX");
publisher.save();
puts_table(Publisher.findAny(Publisher.ID.order_by()));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_save_insert() throws Exception {
puts_table(Publisher.findAny(Publisher.ID.order_by()));
// INSERT INTO PUBLISHER (VOLUMES, UPDATE_DATE, NAME, CREATE_DATE, ID) VALUES (?, ?, ?, ?, ?) [2, 2007-01-05 14:21:04.350, O'Reilly Media, Inc, 2007-01-05 14:21:04.350, 07]
Publisher publisher = new Publisher("07", "O'Reilly Media, Inc", new Integer(2), new Date(), new Date());
publisher.save();
puts_table(Publisher.findAny(Publisher.ID.order_by()));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_destory() throws Exception {
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
// DELETE FROM BOOK WHERE ISSUE_DATE IS NULL AND ( UPDATE_DATE = ? ) AND ( TITLE = ? ) AND ( PUBLISHER = ? ) AND ( ID = ? ) AND ( CREATE_DATE = ? ) AND ( AUTHOR = ? ) [2005-06-10 17:10:00.000, I Know Why the Caged Bird Sings, 01, 001, 1999-06-10 17:10:00.000, Maya Angelou]
Book book = Book.find(Book.PUBLISHER.eq("01").and(Book.ID.eq("001")));
puts(book);
book.destroy();
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_update() throws Exception {
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
// UPDATE BOOK SET TITLE = ? WHERE ( BOOK.PUBLISHER = ? ) AND ( BOOK.ID > ? ) [XXXXX, 01, 001]
Book.update(Book.PUBLISHER.eq("01").and(Book.ID.gt("001")), new Handler() {
public void handle(Book row) {
row.setTitle("XXXXX");
}
});
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_delete() throws Exception {
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
// DELETE FROM BOOK WHERE ( BOOK.PUBLISHER = ? ) AND ( BOOK.ID > ? ) [01, 001]
Book.delete(Book.PUBLISHER.eq("01").and(Book.ID.gt("001")));
puts_table(Book.findAny(Book.PUBLISHER.eq("01").order_by(Book.ID)));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_find_joined() throws Exception {
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES, BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE FROM PUBLISHER, BOOK WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.ID = ? ) AND ( BOOK.ID = ? ) [01, 001]
Map row = Publisher.join(Book.class).find(Publisher.ID.eq("01").and(Book.ID.eq("001")));
puts(row.get(Publisher.class));
puts(row.get(Book.class));
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE, PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM BOOK, PUBLISHER WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.ID = ? ) [02]
Map[] rows01 = Book.join(Publisher.class).findAny(Publisher.ID.eq("02"));
for (int i = 0; i < rows01.length; i++) {
Publisher publisher = (Publisher) rows01[i].get(Publisher.class);
Book book = (Book) rows01[i].get(Book.class);
puts(publisher.getName() + ": " + book.getTitle());
}
// SELECT BO.AUTHOR, BO.CREATE_DATE, BO.ID, BO.ISSUE_DATE, BO.PUBLISHER, BO.TITLE, BO.UPDATE_DATE, PU.CREATE_DATE, PU.ID, PU.NAME, PU.UPDATE_DATE, PU.VOLUMES FROM BOOK BO, PUBLISHER PU WHERE PU.ID = BO.PUBLISHER AND PU.ID = ? [01]
Map[] rows02 = Publisher.join("PU", Book.class, "BO").findAny("PU.ID = BO.PUBLISHER AND PU.ID = ?", "01");
for (int i = 0; i < rows02.length; i++) {
Publisher publisher = (Publisher) rows02[i].get(Publisher.class);
Book book = (Book) rows02[i].get(Book.class);
puts(publisher.getName() + ": " + book.getTitle());
}
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE, PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM BOOK, PUBLISHER WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.ID = ? ) [02]
Map[] rows03 = Book.join(Publisher.class).findAny(Publisher.ID.eq("02"));
for (int i = 0; i < rows03.length; i++) {
Publisher publisher = (Publisher) rows03[i].get(Publisher.class);
Book book = (Book) rows03[i].get(Book.class);
puts(publisher.getName() + ": " + book.getTitle());
}
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE, PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM BOOK, PUBLISHER WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.ID = ? ) [01]
Book.join(Publisher.class).findAny(Publisher.ID.eq("01"), new MapHandler() {
public void handle(Map row) {
Publisher publisher = (Publisher) row.get(Publisher.class);
Book book = (Book) row.get(Book.class);
puts(publisher.getName() + ": " + book.getTitle());
book.setTitle("XXXXX");
book.save();
}
});
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE, PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM BOOK, PUBLISHER WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.ID = ? ) [01]
Book.join(Publisher.class).findAny(Publisher.ID.eq("01"), new Handler() {
public void handle(Publisher publisher, Book book) {
puts(publisher.getName() + ": " + book.getTitle());
}
});
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_find_joined_2() throws Exception {
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE FROM BOOK , PUBLISHER WHERE ( PUBLISHER.ID = BOOK.PUBLISHER ) AND ( PUBLISHER.NAME LIKE ? ESCAPE '\' ) [%Nippon%]
puts_table(Book.findAny(Publisher.NAME.like("%Nippon%")));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_destory_cascade() throws Exception {
puts_table(Publisher.findAny(Publisher.ID.order_by()));
puts_table(Book.findAny(Book.PUBLISHER.order_by().order_by(Book.ID)));
// DELETE FROM BOOK WHERE ( PUBLISHER = ? ) [01]
// DELETE FROM PUBLISHER WHERE ( VOLUMES = ? ) AND ( UPDATE_DATE = ? ) AND ( NAME = ? ) AND ( ID = ? ) AND ( CREATE_DATE = ? ) [4, 2005-07-10 17:10:00.000, Eigakukan, 01, 1999-07-10 17:10:00.000]
puts("rows=" + Publisher.findByPK("01").destroyCascade());
puts_table(Publisher.findAny(Publisher.ID.order_by()));
puts_table(Book.findAny(Book.PUBLISHER.order_by().order_by(Book.ID)));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_get_parent() throws Exception {
Book book = Book.find(Book.PUBLISHER.eq("01").and(Book.ID.eq("001")));
// SELECT PUBLISHER.CREATE_DATE, PUBLISHER.ID, PUBLISHER.NAME, PUBLISHER.UPDATE_DATE, PUBLISHER.VOLUMES FROM PUBLISHER WHERE ( ID = ? ) [01]
puts(book.toPublisher());
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_get_children() throws Exception {
puts("rows=" + Publisher.findByPK("01").bookList().length);
// SELECT BOOK.AUTHOR, BOOK.CREATE_DATE, BOOK.ID, BOOK.ISSUE_DATE, BOOK.PUBLISHER, BOOK.TITLE, BOOK.UPDATE_DATE FROM BOOK WHERE ( PUBLISHER = ? ) [01]
puts(ArrayUtils.toString(Publisher.findByPK("01").bookList()));
DatabaseManager.rollback();
}
//---------------------------------------------------------------
public void sample_add() throws Exception {
puts_table(Publisher.findByPK("01").bookList());
Book book = new Book();
book.setId("999");
book.setTitle("My Title");
book.setAuthor("My Author");
book.setCreate_date(new Date());
book.setUpdate_date(new Date());
// INSERT INTO BOOK (UPDATE_DATE, TITLE, PUBLISHER, CREATE_DATE, AUTHOR, ID) VALUES (?, ?, ?, ?, ?, ?) [2007-01-05 14:21:04.866, My Title, 01, 2007-01-05 14:21:04.866, My Author, 999]
Publisher.findByPK("01").add(book);
puts_table(Publisher.findByPK("01").bookList());
DatabaseManager.rollback();
}
//---------------------------------------------------------------
// +-----------------------------------+
// |IDENTITY_TABLE |
// +-----------------------------------+
// |ID INTEGER PRIMARY KEY(ID)|
// |INSERT_DATE DATE NULL |
// +-----------------------------------+
public void sample_identity_table() throws Exception {
Identity_table.addTrigger(new AfterCreate() {
public void execute(Timing timing, Event event, ActiveRecord row, Database dbh) {
Identity_table identity_table = (Identity_table) row;
identity_table.setId((Integer) dbh.getOne("CALL IDENTITY()"));
}
});
// INSERT INTO IDENTITY_TABLE (INSERT_DATE) VALUES (?) [2007-01-05 14:21:04.897]
// CALL IDENTITY()
Identity_table row1 = new Identity_table();
row1.setInsert_date(new Date());
row1.save();
puts(row1);
// INSERT INTO IDENTITY_TABLE (INSERT_DATE) VALUES (?) [2007-01-05 14:21:04.913]
// CALL IDENTITY()
Identity_table row2 = new Identity_table();
row2.setInsert_date(new Date());
row2.save();
puts(row2);
puts_table(Identity_table.findAny());
DatabaseManager.rollback();
}
//---------------------------------------------------------------
// +---------------------------------+
// |ARTIST |
// +---------------------------------+ +----------------------+
// |ID INTEGER PRIMARY KEY(ID)---+ |PAINTING |
// |NAME VARCHAR(256) NOT NULL | | +----------------------+
// +---------------------------------+ +--->ARTIST_ID PRIMARY KEY|
// +-->GALLERY_ID PRIMARY KEY|
// +---------------------------------+ | +----------------------+
// |GALLERY | |
// +---------------------------------+ |
// |ID INTEGER PRIMARY KEY(ID)----+
// |NAME VARCHAR(256) NOT NULL |
// +---------------------------------+
public void sample_associate() throws Exception {
Artist.addTrigger(new AfterCreate() {
public void execute(Timing timing, Event event, ActiveRecord row, Database dbh) {
Artist artist = (Artist) row;
artist.setId((Integer) dbh.getOne("CALL IDENTITY()"));
}
});
Gallery.addTrigger(new AfterCreate() {
public void execute(Timing timing, Event event, ActiveRecord row, Database dbh) {
Gallery gallery = (Gallery) row;
gallery.setId((Integer) dbh.getOne("CALL IDENTITY()"));
}
});
Artist lassen = new Artist();
lassen.setName("Christian Riese Lassen");
lassen.save();
Artist yamagata = new Artist();
yamagata.setName("Hiro Yamagata");
yamagata.save();
Gallery red = new Gallery();
red.setName("Red Gallery");
red.save();
Gallery blue = new Gallery();
blue.setName("Blue Gallery");
blue.save();
Gallery green = new Gallery();
green.setName("Green Gallery");
green.save();
puts("\n===== initial state =====");
// +--+----------------------+
// |id|name |
// +--+----------------------+
// |0 |Christian Riese Lassen|
// |1 |Hiro Yamagata |
// +--+----------------------+
puts_table(Artist.findAny());
// +--+-------------+
// |id|name |
// +--+-------------+
// |0 |Red Gallery |
// |1 |Blue Gallery |
// |2 |Green Gallery|
// +--+-------------+
puts_table(Gallery.findAny());
// Empty set
puts_table(Painting.findAny());
puts("");
puts("\n===== associated =====");
// INSERT INTO PAINTING (GALLERY_ID, ARTIST_ID) VALUES (?, ?) [1, 0]
lassen.associate(blue);
// INSERT INTO PAINTING (GALLERY_ID, ARTIST_ID) VALUES (?, ?) [2, 0]
lassen.associate(green);
// INSERT INTO PAINTING (GALLERY_ID, ARTIST_ID) VALUES (?, ?) [0, 1]
yamagata.associate(red);
// INSERT INTO PAINTING (GALLERY_ID, ARTIST_ID) VALUES (?, ?) [1, 1]
yamagata.associate(blue);
// INSERT INTO PAINTING (GALLERY_ID, ARTIST_ID) VALUES (?, ?) [2, 1]
yamagata.associate(green);
puts("");
puts_table(Painting.findAny());
puts("- lassen <- Gallery");
// SELECT GALLERY.ID, GALLERY.NAME FROM GALLERY , PAINTING WHERE ( PAINTING.GALLERY_ID = GALLERY.ID ) AND ( PAINTING.ARTIST_ID = ? ) [0]
puts_table(lassen.pull(Gallery.class));
puts("- yamagata <- Gallery");
// SELECT GALLERY.ID, GALLERY.NAME FROM GALLERY , PAINTING WHERE ( PAINTING.GALLERY_ID = GALLERY.ID ) AND ( PAINTING.ARTIST_ID = ? ) [1]
puts_table(yamagata.pull(Gallery.class));
puts("- red <- Artist");
// SELECT ARTIST.ID, ARTIST.NAME FROM ARTIST , PAINTING WHERE ( PAINTING.ARTIST_ID = ARTIST.ID ) AND ( PAINTING.GALLERY_ID = ? ) [0]
puts_table(red.pull(Artist.class));
puts("- blue <- Artist");
// SELECT ARTIST.ID, ARTIST.NAME FROM ARTIST , PAINTING WHERE ( PAINTING.ARTIST_ID = ARTIST.ID ) AND ( PAINTING.GALLERY_ID = ? ) [1]
puts_table(blue.pull(Artist.class));
puts("- green <- Artist");
// SELECT ARTIST.ID, ARTIST.NAME FROM ARTIST , PAINTING WHERE ( PAINTING.ARTIST_ID = ARTIST.ID ) AND ( PAINTING.GALLERY_ID = ? ) [1]
puts_table(green.pull(Artist.class));
puts("");
puts("\n===== unassociated green<->yamagata, lassen<->blue =====");
// DELETE FROM PAINTING WHERE ( GALLERY_ID = ? ) AND ( ARTIST_ID = ? ) [2, 1]'
green.unassociate(yamagata);
// DELETE FROM PAINTING WHERE ( GALLERY_ID = ? ) AND ( ARTIST_ID = ? ) [1, 0]'
lassen.unassociate(blue);
puts("");
puts_table(Painting.findAny());
puts("- lassen <- Gallery");
puts_table(lassen.pull(Gallery.class));
puts("- yamagata <- Gallery");
puts_table(yamagata.pull(Gallery.class));
puts("- red <- Artist");
puts_table(red.pull(Artist.class));
puts("- blue <- Artist");
puts_table(blue.pull(Artist.class));
puts("- green <- Artist");
puts_table(green.pull(Artist.class));
puts_table(green.pull("artist"));
puts("");
DatabaseManager.rollback();
}
}