Skip to content

Commit 74b29dd

Browse files
committed
Implement copy.
1 parent 558101e commit 74b29dd

13 files changed

Lines changed: 151 additions & 7 deletions

File tree

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

blockstore/src/org/model/BlockStore.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,24 @@ public BlockStore(DBContext context, String dataStore) {
5757
//logger.info("BlockStore created - " + dataStore);
5858
}
5959

60+
public BlockStore clone(DBContext context, String dataStore) {
61+
BlockStore blockStore = new BlockStore(context, dataStore);
62+
flushDirtyBlocks(context);
63+
String copyTable = (new StringBuffer())
64+
.append("INSERT INTO ")
65+
.append(dataStore)
66+
.append(" SELECT * FROM ")
67+
.append(this.dataStore)
68+
.toString();
69+
AutoRollbackConnection connection = context.getConnection();
70+
try (Statement stmt = connection.createStatement()) {
71+
stmt.execute(copyTable);
72+
} catch (SQLException e) {
73+
e.printStackTrace();
74+
}
75+
return blockStore;
76+
}
77+
6078
public String getDataStore() {
6179
return dataStore;
6280
}

zssmodel/src/org/zkoss/zss/model/SSheet.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,11 @@ public interface SSheet {
422422
*/
423423
void createModel(DBContext dbContext, String modelName);
424424

425+
/**
426+
* Copy a model for the sheet
427+
*/
428+
void cloneModel(DBContext dbContext, String modelName, SSheet src);
429+
425430
/**
426431
* Create a model for the sheet
427432
*/

zssmodel/src/org/zkoss/zss/model/impl/BTree.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,20 @@ public BTree(DBContext context, String tableName) {
4242
loadMetaData(context);
4343
}
4444

45+
46+
/**
47+
* Construct an BTree from an existing BTree, in-memory
48+
*/
49+
protected BTree(DBContext context, String tableName, BlockStore sourceBlockStore) {
50+
bs = sourceBlockStore.clone(context, tableName);
51+
loadMetaData(context);
52+
}
53+
54+
@Override
55+
public BTree clone(DBContext context, String tableName){
56+
return new BTree(context, tableName, bs);
57+
}
58+
4559
/**
4660
* Find the index, i, at which x should be inserted into the null-padded
4761
* sorted array, a

zssmodel/src/org/zkoss/zss/model/impl/BookImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.model.DBContext;
2121
import org.model.DBHandler;
2222
import org.zkoss.lang.Objects;
23-
import org.zkoss.util.logging.Log;
2423
import org.zkoss.zk.ui.Executions;
2524
import org.zkoss.zss.model.*;
2625
import org.zkoss.zss.model.impl.sys.DependencyTableAdv;
@@ -38,7 +37,6 @@
3837
import org.zkoss.zss.model.util.Validations;
3938
import org.zkoss.zss.range.impl.StyleUtil;
4039

41-
import java.awt.print.Book;
4240
import java.sql.*;
4341
import java.util.*;
4442
import java.util.concurrent.atomic.AtomicInteger;
@@ -356,7 +354,7 @@ public SSheet createSheet(String name,SSheet src) {
356354
rs.close();
357355
DBContext dbContext = new DBContext(connection);
358356
String modelName = bookTable + sheet.getDBId();
359-
sheet.createModel(dbContext, modelName);
357+
sheet.cloneModel(dbContext, modelName, src);
360358
connection.commit();
361359
}
362360
catch (SQLException e)

zssmodel/src/org/zkoss/zss/model/impl/COM_Model.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ public class COM_Model extends Model {
2020
rom_model = new ROM_Model(context, sheet, tableName);
2121
}
2222

23+
COM_Model(DBContext context, SSheet sheet, String tableName, COM_Model source) {
24+
this.sheet = sheet;
25+
this.tableName = tableName;
26+
rom_model = source.rom_model.clone(context, sheet, tableName);
27+
}
28+
29+
@Override
30+
public COM_Model clone(DBContext dbContext, SSheet sheet, String modelName) {
31+
return new COM_Model(dbContext, sheet, modelName, this);
32+
}
33+
34+
2335
@Override
2436
public void dropSchema(DBContext context) {
2537
rom_model.dropSchema(context);

zssmodel/src/org/zkoss/zss/model/impl/Hybrid_Model.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ public class Hybrid_Model extends RCV_Model {
3333
loadMetaData(context);
3434
}
3535

36+
public Hybrid_Model(DBContext context, SSheet sheet, String tableName, Hybrid_Model source) {
37+
super(context,sheet,tableName,source);
38+
source.bs.clone(context, tableName + "_hb_meta");
39+
loadMetaData(context);
40+
41+
}
42+
43+
@Override
44+
public Model clone(DBContext context, SSheet sheet, String tableName) {
45+
return new Hybrid_Model(context, sheet, tableName, this);
46+
}
47+
3648
public boolean checkOverlap(CellRegion cellRegion) {
3749
return metaDataBlock.modelEntryList
3850
.stream()

zssmodel/src/org/zkoss/zss/model/impl/Model.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ public String getTableName() {
9191

9292
public abstract boolean deleteTableColumns(DBContext dbContext, CellRegion cellRegion);
9393

94+
// Clone only the corresponding tables in postgres
95+
public abstract Model clone(DBContext dbContext, SSheet sheet, String modelName);
96+
9497
//
9598
public enum ModelType {
9699
ROM_Model, COM_Model, RCV_Model, HYBRID_Model, TOM_Model

zssmodel/src/org/zkoss/zss/model/impl/PosMapping.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public interface PosMapping {
2121
// Rollback and Flush Cache
2222
void clearCache(DBContext context);
2323

24+
PosMapping clone(DBContext context, String tableName);
25+
2426
int size(DBContext context);
2527

2628
String getTableName();

zssmodel/src/org/zkoss/zss/model/impl/RCV_Model.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ protected RCV_Model(DBContext context, SSheet sheet, String tableName) {
3434
loadMetaData(context);
3535
}
3636

37+
protected RCV_Model(DBContext context, SSheet sheet, String tableName, RCV_Model source) {
38+
this.sheet = sheet;
39+
rowMapping = source.rowMapping.clone(context, tableName + "_row_idx");
40+
colMapping = source.colMapping.clone(context, tableName + "_col_idx");
41+
this.tableName = tableName;
42+
copySchema(context, source.tableName);
43+
source.bs.clone(context, tableName + "_rcv_meta");
44+
loadMetaData(context);
45+
}
46+
47+
@Override
48+
public Model clone(DBContext context, SSheet sheet, String tableName) {
49+
return new RCV_Model(context, sheet, tableName, this);
50+
}
3751

3852
private void loadMetaData(DBContext context) {
3953
bs = new BlockStore(context, tableName + "_rcv_meta");
@@ -45,6 +59,22 @@ private void loadMetaData(DBContext context) {
4559
}
4660
}
4761

62+
//Copy the table
63+
private void copySchema(DBContext dbContext, String sourceTable) {
64+
createSchema(dbContext);
65+
String copyTable = (new StringBuffer())
66+
.append("INSERT INTO ")
67+
.append(tableName)
68+
.append(" SELECT * FROM ")
69+
.append(sourceTable)
70+
.toString();
71+
AutoRollbackConnection connection = dbContext.getConnection();
72+
try (Statement stmt = connection.createStatement()) {
73+
stmt.execute(copyTable);
74+
} catch (SQLException e) {
75+
e.printStackTrace();
76+
}
77+
}
4878

4979
//Create a table from the database
5080
private void createSchema(DBContext dbContext) {

0 commit comments

Comments
 (0)