1 24 25 package com.mckoi.database; 26 27 import java.io.*; 28 import com.mckoi.database.global.BlobAccessor; 29 import com.mckoi.database.global.ByteLongObject; 30 31 40 41 public class ViewDef { 42 43 46 private DataTableDef view_def; 47 48 51 private QueryPlanNode view_query_node; 52 53 56 public ViewDef(DataTableDef view_def, QueryPlanNode query_node) { 57 this.view_def = view_def; 58 this.view_query_node = query_node; 59 } 60 61 64 public DataTableDef getDataTableDef() { 65 return view_def; 66 } 67 68 71 public QueryPlanNode getQueryPlanNode() { 72 try { 73 return (QueryPlanNode) view_query_node.clone(); 74 } 75 catch (CloneNotSupportedException e) { 76 throw new Error ("Clone error: " + e.getMessage()); 77 } 78 } 79 80 81 82 86 ByteLongObject serializeToBlob() { 87 try { 88 ByteArrayOutputStream byte_out = new ByteArrayOutputStream(); 89 ObjectOutputStream out = new ObjectOutputStream(byte_out); 90 out.writeInt(1); 92 getDataTableDef().write(out); 94 out.writeObject(getQueryPlanNode()); 96 97 out.flush(); 98 99 return new ByteLongObject(byte_out.toByteArray()); 100 101 } 102 catch (IOException e) { 103 throw new Error ("IO Error: " + e.getMessage()); 104 } 105 106 } 107 108 112 static final ViewDef deserializeFromBlob(BlobAccessor blob) { 113 InputStream blob_in = blob.getInputStream(); 114 try { 115 ObjectInputStream in = new ObjectInputStream(blob_in); 116 int version = in.readInt(); 118 if (version == 1) { 119 DataTableDef view_def = DataTableDef.read(in); 120 view_def.setImmutable(); 121 QueryPlanNode view_plan = (QueryPlanNode) in.readObject(); 122 return new ViewDef(view_def, view_plan); 123 } 124 else { 125 throw new IOException( 126 "Newer ViewDef version serialization: " + version); 127 } 128 129 } 130 catch (IOException e) { 131 throw new Error ("IO Error: " + e.getMessage()); 132 } 133 catch (ClassNotFoundException e) { 134 throw new Error ("Class not found: " + e.getMessage()); 135 } 136 } 137 138 } 139 140 | Popular Tags |