INTERNAL: database tuning
authorwoojin <woojin2.jung@samsung.com>
Wed, 27 Aug 2014 21:36:53 +0000 (06:36 +0900)
committergreatim <jaewon81.lim@samsung.com>
Thu, 28 Aug 2014 02:30:28 +0000 (11:30 +0900)
1. add API for creating index table
2. create index table for function entry/exit
3. improve select query of function exit table for range analysis

Change-Id: I2bebda5ab0d8933ddb07eb693a87d1ef2078dbb9
Signed-off-by: woojin <woojin2.jung@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBColumn.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/database/DBTableRegistry.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java

index 2f06217..27c598b 100644 (file)
@@ -32,12 +32,14 @@ public class DBColumn {
        private String option;
        private String type;
        private int string_size;
+       private boolean isIndex;
 
        public DBColumn(String name, String option, String type) {
                this.name = name;
                this.option = option;
                this.type = type;
                this.string_size = 0;
+               this.isIndex = false;
        }
 
        public DBColumn(String name, String option, String type, int size) {
@@ -45,8 +47,9 @@ public class DBColumn {
                this.option = option;
                this.type = type;
                this.string_size = size;
+               this.isIndex = false;
        }
-
+       
        public String getName() {
                return name;
        }
@@ -62,6 +65,14 @@ public class DBColumn {
        public int getStringSize() {
                return string_size;
        }
+       
+       public boolean isIndex() {
+               return isIndex;
+       }
+       
+       public void setIndex(boolean isIndex) {
+               this.isIndex = isIndex;
+       }       
 
        public String getColumnString() {
                if (DBConstants.VARCHAR.equals(type)) {
index 81bc1f1..d3b0038 100644 (file)
@@ -55,6 +55,10 @@ public abstract class DBTable implements IPreparedStatement {
        protected final void addColumn(DBColumn col) {
                columns.add(col);
        }
+       
+       protected final void setIndexColumn(int index) {
+               columns.get(index).setIndex(true);
+       }
 
        protected final String clipString(String colstr, int str_len, String key) {
                String retstr = colstr;
@@ -139,11 +143,25 @@ public abstract class DBTable implements IPreparedStatement {
                return SqlConnectionManager.executeQuery(query.toString());
        }
 
-       public final void createIndexTable(String indexColumn) {
-               String queryString = "create index " + getTableName() + "_index on "//$NON-NLS-1$//$NON-NLS-2$
-                               + getTableName() + CommonConstants.OPEN_BRACKET + indexColumn
-                               + CommonConstants.CLOSE_BRACKET;
-
-               SqlConnectionManager.executeUpdate(queryString);
+       public final void createIndexTable() {
+               int size = columns.size();
+               StringBuffer indexColumns = new StringBuffer();
+               
+               for (int i = 0; i < size; i++) {
+                       if (columns.get(i).isIndex()) {
+                               if (indexColumns.length() > 0) {
+                                       indexColumns.append(", ");
+                               }
+                               indexColumns.append(columns.get(i).getName());
+                       }
+               }
+               
+               if (indexColumns.length() > 0) {
+                       String queryString = "create index " + getTableName() + "_index on "//$NON-NLS-1$//$NON-NLS-2$
+                                       + getTableName() + CommonConstants.OPEN_BRACKET + indexColumns.toString()
+                                       + CommonConstants.CLOSE_BRACKET;
+       
+                       SqlConnectionManager.executeUpdate(queryString);
+               }
        }
 }
index 7e6373f..4326536 100644 (file)
@@ -46,6 +46,7 @@ public class DBTableRegistry {
                for (Map.Entry<String, DBTable> entry : tables.entrySet()) {
                        DBTable table = entry.getValue();
                        table.createTable();
+                       table.createIndexTable();
                }
        }
        
index 1293975..03e10ef 100644 (file)
@@ -90,6 +90,7 @@ public class FunctionEntryDBTable extends DBTable {
                addColumn(new DBColumn(COLUMN.PCADDR.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, 
                                DBConstants.VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
+               setIndexColumn(COLUMN.STARTTIME.index);
        }
 
        public List<List<Object>> getFunctionEntryFromDB() {
index c620a89..b8f596f 100644 (file)
@@ -50,8 +50,8 @@ public class FunctionExitDBTable extends DBTable {
                        FunctionEntryDBTable.COLUMN.PCADDR.name;
        
        public static final String SELECT_QUERY = 
-                       "select limit %s %s " + SELECT_COLUMN + " from " + FunctionEntryDBTable.TABLENAME + 
-                       CommonConstants.COMMA + TABLENAME + " where " + 
+                       "select limit %s %s " + SELECT_COLUMN + " from " + TABLENAME + 
+                       CommonConstants.COMMA + FunctionEntryDBTable.TABLENAME + " where " + 
                        COLUMN.ENTRYSEQ.name + CommonConstants.EQUAL + FunctionEntryDBTable.COLUMN.SEQ.name +
                        " and " + COLUMN.ENDTIME.name + " >= %s and " + COLUMN.ENDTIME.name + " <= %s";
        
@@ -81,6 +81,7 @@ public class FunctionExitDBTable extends DBTable {
                addColumn(new DBColumn(COLUMN.ENDTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
                addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY, 
                                DBConstants.DBTYPE_VARCHAR, FUNCTION_RETURN_VALUE_LENGTH));
+               setIndexColumn(COLUMN.ENDTIME.index);           
        }
 
        public List<List<Object>> getFunctionExitFromDB() {