Skip to content

Commit c0875ac

Browse files
Merge pull request #144 from dataspread/Yu_Lu
2 parents c640d37 + e0efc23 commit c0875ac

13 files changed

Lines changed: 150 additions & 13 deletions

File tree

blockstore/src/org/model/BlockStore.java

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

69+
public BlockStore clone(DBContext context, String dataStore) {
70+
BlockStore blockStore = new BlockStore(context, dataStore);
71+
flushDirtyBlocks(context);
72+
String copyTable = (new StringBuffer())
73+
.append("INSERT INTO ")
74+
.append(dataStore)
75+
.append(" SELECT * FROM ")
76+
.append(this.dataStore)
77+
.toString();
78+
AutoRollbackConnection connection = context.getConnection();
79+
try (Statement stmt = connection.createStatement()) {
80+
stmt.execute(copyTable);
81+
} catch (SQLException e) {
82+
e.printStackTrace();
83+
}
84+
return blockStore;
85+
}
86+
6987
public String getDataStore() {
7088
return dataStore;
7189
}

zss/src/org/zkoss/zss/api/SheetOperationUtil.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -414,13 +414,6 @@ public void run(Range range) {
414414
String prefix = range.getSheetName();
415415
int num = 1;
416416
String name = null;
417-
418-
Pattern pattern = Pattern.compile("(.*) \\(([0-9]+)\\)$");
419-
Matcher matcher = pattern.matcher(prefix);
420-
if(matcher.find()) {
421-
prefix = matcher.group(1);
422-
num = Integer.parseInt(matcher.group(2));
423-
}
424417

425418
for(int i = 0, length = range.getBook().getNumberOfSheets(); i <= length; i++) {
426419
String n = prefix + " (" + ++num + ")";

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
@@ -51,6 +51,20 @@ public BTree(DBContext context, String tableName) {
5151
loadMetaData(context);
5252
}
5353

54+
55+
/**
56+
* Construct an BTree from an existing BTree, in-memory
57+
*/
58+
protected BTree(DBContext context, String tableName, BlockStore sourceBlockStore) {
59+
bs = sourceBlockStore.clone(context, tableName);
60+
loadMetaData(context);
61+
}
62+
63+
@Override
64+
public BTree clone(DBContext context, String tableName){
65+
return new BTree(context, tableName, bs);
66+
}
67+
5468
/**
5569
* Find the index, i, at which x should be inserted into the null-padded
5670
* 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)