← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 18553: SQL views. Impl support for materialized sql views.

 

------------------------------------------------------------
revno: 18553
committer: Lars Helge Overland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2015-03-10 12:36:58 +0100
message:
  SQL views. Impl support for materialized sql views.
added:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewType.java
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewService.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewStore.java
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/DefaultSqlViewService.java
  dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewStore.java
  dhis-2/dhis-services/dhis-service-administration/src/main/resources/org/hisp/dhis/sqlview/hibernate/SqlView.hbm.xml
  dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java
  dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/AddSqlViewAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/RemoveSqlViewAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/addSqlViewForm.vm
  dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/updateSqlViewForm.vm


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java	2015-02-26 15:21:29 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlView.java	2015-03-10 11:36:58 +0000
@@ -74,7 +74,7 @@
 
     private String sqlQuery;
 
-    private boolean query;
+    private SqlViewType type;
     
     // -------------------------------------------------------------------------
     // Constructors
@@ -84,11 +84,11 @@
     {
     }
 
-    public SqlView( String name, String sqlQuery, boolean query )
+    public SqlView( String name, String sqlQuery, SqlViewType type )
     {
         this.name = name;
         this.sqlQuery = sqlQuery;
-        this.query = query;
+        this.type = type;
     }
 
     // -------------------------------------------------------------------------
@@ -176,6 +176,14 @@
         return this;
     }
 
+    /**
+     * Indicates whether this SQL view is a query.
+     */
+    public boolean isQuery()
+    {
+        return SqlViewType.QUERY.equals( type );
+    }
+    
     // -------------------------------------------------------------------------
     // Getters and setters
     // -------------------------------------------------------------------------
@@ -210,16 +218,15 @@
     @JsonProperty
     @JsonView( { DetailedView.class, ExportView.class } )
     @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
-    public boolean isQuery()
+    public SqlViewType getType()
     {
-        return query;
+        return type;
     }
 
-    public void setQuery( boolean query )
+    public void setType( SqlViewType type )
     {
-        this.query = query;
+        this.type = type;
     }
-        
 
     @Override
     public void mergeWith( IdentifiableObject other, MergeStrategy strategy )
@@ -234,13 +241,13 @@
             {
                 description = sqlView.getDescription();
                 sqlQuery = sqlView.getSqlQuery();
-                query = sqlView.isQuery();
+                type = sqlView.getType();
             }
             else if ( strategy.isMerge() )
             {
                 description = sqlView.getDescription() == null ? description : sqlView.getDescription();
                 sqlQuery = sqlView.getSqlQuery() == null ? sqlQuery : sqlView.getSqlQuery();
-                query = sqlView.isQuery();
+                type = sqlView.getType() == null ? type : sqlView.getType();
             }
         }
     }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewService.java	2015-03-03 16:18:51 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewService.java	2015-03-10 11:36:58 +0000
@@ -86,7 +86,7 @@
 
     String createViewTable( SqlView sqlView );
 
-    void dropViewTable( String viewName );
+    void dropViewTable( SqlView sqlView );
     
     /**
     * Returns the SQL view as a grid.

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewStore.java	2015-02-12 09:28:20 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewStore.java	2015-03-10 11:36:58 +0000
@@ -43,9 +43,9 @@
 
     boolean viewTableExists( String viewTableName );
 
-    String createViewTable( SqlView sqlViewInstance );
+    String createViewTable( SqlView sqlView );
 
-    void dropViewTable( String sqlViewName );
+    void dropViewTable( SqlView sqlView );
 
     void setUpDataSqlViewTable( Grid sqlViewGrid, String viewTableName, Map<String, String> criteria );
     

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewType.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sqlview/SqlViewType.java	2015-03-10 11:36:58 +0000
@@ -0,0 +1,34 @@
+package org.hisp.dhis.sqlview;
+
+/*
+ * Copyright (c) 2004-2015, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+public enum SqlViewType
+{
+    VIEW, MATERIALIZED_VIEW, QUERY
+}

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java	2015-03-03 16:18:51 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/resourcetable/DefaultResourceTableService.java	2015-03-10 11:36:58 +0000
@@ -548,7 +548,7 @@
         {
             if ( !view.isQuery() )
             {
-                sqlViewService.dropViewTable( view.getViewName() );
+                sqlViewService.dropViewTable( view );
             }
         }
     }

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/DefaultSqlViewService.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/DefaultSqlViewService.java	2015-03-03 16:18:51 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/DefaultSqlViewService.java	2015-03-10 11:36:58 +0000
@@ -67,11 +67,14 @@
     // -------------------------------------------------------------------------
 
     @Override
-    public void deleteSqlView( SqlView sqlViewObject )
+    public void deleteSqlView( SqlView sqlView )
     {
-        dropViewTable( sqlViewObject.getViewName() );
+        if ( !sqlView.isQuery() )
+        {
+            dropViewTable( sqlView );
+        }
         
-        sqlViewStore.delete( sqlViewObject );
+        sqlViewStore.delete( sqlView );
     }
 
     @Override
@@ -105,15 +108,15 @@
     }
 
     @Override
-    public int saveSqlView( SqlView sqlViewObject )
+    public int saveSqlView( SqlView sqlView )
     {
-        return sqlViewStore.save( sqlViewObject );
+        return sqlViewStore.save( sqlView );
     }
 
     @Override
-    public void updateSqlView( SqlView sqlViewObject )
+    public void updateSqlView( SqlView sqlView )
     {
-        sqlViewStore.update( sqlViewObject );
+        sqlViewStore.update( sqlView );
     }
 
     @Override
@@ -282,8 +285,8 @@
     }
 
     @Override
-    public void dropViewTable( String sqlViewTableName )
+    public void dropViewTable( SqlView sqlView )
     {
-        sqlViewStore.dropViewTable( sqlViewTableName );
+        sqlViewStore.dropViewTable( sqlView );
     }
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewStore.java'
--- dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewStore.java	2015-03-02 15:49:50 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/java/org/hisp/dhis/sqlview/jdbc/JdbcSqlViewStore.java	2015-03-10 11:36:58 +0000
@@ -37,10 +37,13 @@
 import org.hisp.dhis.jdbc.StatementBuilder;
 import org.hisp.dhis.sqlview.SqlView;
 import org.hisp.dhis.sqlview.SqlViewStore;
+import org.hisp.dhis.sqlview.SqlViewType;
 import org.hisp.dhis.system.util.SqlHelper;
 import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.jdbc.support.rowset.SqlRowSet;
 
+import com.google.common.collect.ImmutableMap;
+
 /**
  * @author Dang Duy Hieu
  */
@@ -50,8 +53,13 @@
 {
     private static final Log log = LogFactory.getLog( JdbcSqlViewStore.class );
 
-    private static final String PREFIX_CREATEVIEW_QUERY = "CREATE VIEW ";
     private static final String PREFIX_SELECT_QUERY = "SELECT * FROM ";
+    
+    private static final Map<SqlViewType, String> TYPE_CREATE_PREFIX_MAP = 
+        ImmutableMap.of( SqlViewType.VIEW, "CREATE VIEW ", SqlViewType.MATERIALIZED_VIEW, "CREATE MATERIALIZED VIEW " );
+
+    private static final Map<SqlViewType, String> TYPE_DROP_PREFIX_MAP = 
+        ImmutableMap.of( SqlViewType.VIEW, "DROP VIEW ", SqlViewType.MATERIALIZED_VIEW, "DROP MATERIALIZED VIEW " );
 
     // -------------------------------------------------------------------------
     // Dependencies
@@ -86,11 +94,9 @@
     @Override
     public String createViewTable( SqlView sqlView )
     {
-        String viewName = sqlView.getViewName();
-
-        dropViewTable( viewName );
-
-        final String sql = PREFIX_CREATEVIEW_QUERY + statementBuilder.columnQuote( viewName ) + " AS " + sqlView.getSqlQuery();
+        dropViewTable( sqlView );
+
+        final String sql = TYPE_CREATE_PREFIX_MAP.get( sqlView.getType() ) + statementBuilder.columnQuote( sqlView.getViewName() ) + " AS " + sqlView.getSqlQuery();
 
         log.debug( "Create view SQL: " + sql );
 
@@ -138,9 +144,9 @@
     @Override
     public String testSqlGrammar( String sql )
     {
-        String viewNameCheck = SqlView.PREFIX_VIEWNAME + System.currentTimeMillis();
+        String viewName = SqlView.PREFIX_VIEWNAME + System.currentTimeMillis();
 
-        sql = PREFIX_CREATEVIEW_QUERY + viewNameCheck + " AS " + sql;
+        sql = "CREATE VIEW " + viewName + " AS " + sql;
 
         log.debug( "Test view SQL: " + sql );
 
@@ -148,7 +154,7 @@
         {
             jdbcTemplate.execute( sql );
 
-            dropViewTable( viewNameCheck );
+            jdbcTemplate.execute( "DROP VIEW IF EXISTS " + viewName );
         }
         catch ( BadSqlGrammarException ex )
         {
@@ -159,11 +165,13 @@
     }
 
     @Override
-    public void dropViewTable( String viewName )
+    public void dropViewTable( SqlView sqlView )
     {
+        String viewName = sqlView.getViewName();
+        
         try
         {
-            final String sql = "DROP VIEW IF EXISTS " + statementBuilder.columnQuote( viewName );
+            final String sql = TYPE_DROP_PREFIX_MAP.get( sqlView.getType() ) + " IF EXISTS " + statementBuilder.columnQuote( viewName );
             
             log.debug( "Drop view SQL: " + sql );
             

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/main/resources/org/hisp/dhis/sqlview/hibernate/SqlView.hbm.xml'
--- dhis-2/dhis-services/dhis-service-administration/src/main/resources/org/hisp/dhis/sqlview/hibernate/SqlView.hbm.xml	2015-02-11 22:32:01 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/main/resources/org/hisp/dhis/sqlview/hibernate/SqlView.hbm.xml	2015-03-10 11:36:58 +0000
@@ -19,7 +19,12 @@
 
     <property name="sqlQuery" not-null="true" type="text" />
     
-    <property name="query" />
+    <property name="type" length="40">
+		<type name="org.hibernate.type.EnumType">
+			<param name="enumClass">org.hisp.dhis.sqlview.SqlViewType</param>
+			<param name="type">12</param>
+		</type> 
+	</property>
 
     <!-- Access properties -->
     <property name="externalAccess" />

=== modified file 'dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java'
--- dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java	2015-02-18 12:16:29 +0000
+++ dhis-2/dhis-services/dhis-service-administration/src/test/java/org/hisp/dhis/sqlview/SqlViewServiceTest.java	2015-03-10 11:36:58 +0000
@@ -225,7 +225,7 @@
     @Test( expected = IllegalQueryException.class )
     public void testValidateIllegalKeywords()
     {
-        SqlView sqlView = new SqlView( "Name", "delete * from dataelement", true );
+        SqlView sqlView = new SqlView( "Name", "delete * from dataelement", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }
@@ -233,7 +233,7 @@
     @Test( expected = IllegalQueryException.class )
     public void testValidateProtectedTables()
     {
-        SqlView sqlView = new SqlView( "Name", "select * from userinfo where userinfoid=1", true );
+        SqlView sqlView = new SqlView( "Name", "select * from userinfo where userinfoid=1", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }
@@ -241,7 +241,7 @@
     @Test( expected = IllegalQueryException.class )
     public void testValidateMissingVariables()
     {
-        SqlView sqlView = new SqlView( "Name", "select * from dataelement where valueType = '${valueType}' and aggregationtype = '${aggregationType}'", true );
+        SqlView sqlView = new SqlView( "Name", "select * from dataelement where valueType = '${valueType}' and aggregationtype = '${aggregationType}'", SqlViewType.QUERY );
         
         Map<String, String> variables = new HashMap<>();
         variables.put( "valueType", "int" );
@@ -252,7 +252,7 @@
     @Test( expected = IllegalQueryException.class )
     public void testValidateIllegalSemiColon()
     {
-        SqlView sqlView = new SqlView( "Name", "select * from dataelement; delete from dataelement", true );
+        SqlView sqlView = new SqlView( "Name", "select * from dataelement; delete from dataelement", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }
@@ -260,7 +260,7 @@
     @Test( expected = IllegalQueryException.class )
     public void testValidateNotSelectQuery()
     {
-        SqlView sqlView = new SqlView( "Name", "* from dataelement", true );
+        SqlView sqlView = new SqlView( "Name", "* from dataelement", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }
@@ -268,7 +268,7 @@
     @Test
     public void testValidateSuccessA()
     {
-        SqlView sqlView = new SqlView( "Name", "select * from dataelement where valueType = '${valueType}'", true );
+        SqlView sqlView = new SqlView( "Name", "select * from dataelement where valueType = '${valueType}'", SqlViewType.QUERY );
         
         Map<String, String> variables = new HashMap<>();
         variables.put( "valueType", "int" );
@@ -279,7 +279,7 @@
     @Test
     public void testValidateSuccessB()
     {
-        SqlView sqlView = new SqlView( "Name", "select ug.name from usergroup ug where ug.name ~* '^OU\\s(\\w.*)\\sAgency\\s(\\w.*)\\susers$'", false );
+        SqlView sqlView = new SqlView( "Name", "select ug.name from usergroup ug where ug.name ~* '^OU\\s(\\w.*)\\sAgency\\s(\\w.*)\\susers$'", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }
@@ -287,7 +287,7 @@
     @Test
     public void testValidateSuccessC()
     {
-        SqlView sqlView = new SqlView( "Name", "SELECT a.dataelementid as dsd_id,a.name as dsd_name,b.dataelementid as ta_id,b.ta_name FROM dataelement a", false );
+        SqlView sqlView = new SqlView( "Name", "SELECT a.dataelementid as dsd_id,a.name as dsd_name,b.dataelementid as ta_id,b.ta_name FROM dataelement a", SqlViewType.QUERY );
         
         sqlViewService.validateSqlView( sqlView, null, null );
     }

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java	2015-02-18 13:39:52 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java	2015-03-10 11:36:58 +0000
@@ -707,8 +707,9 @@
         executeSql( "alter table validationrulegroup rename column validationgroupid to validationrulegroupid" );
         executeSql( "update sqlview set sqlviewid=viweid" );
         executeSql( "alter table sqlview drop column viewid" );
-        executeSql( "update sqlview set query = false where query is null" );
-
+        executeSql( "update sqlview set type = 'QUERY' where query is true" );
+        executeSql( "update sqlview set type = 'VIEW' where type is null" );
+        
         executeSql( "UPDATE dashboard SET publicaccess='--------' WHERE publicaccess is null" );
 
         executeSql( "UPDATE optionset SET version=0 WHERE version IS NULL" );

=== modified file 'dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java'
--- dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java	2015-02-24 13:16:58 +0000
+++ dhis-2/dhis-support/dhis-support-test/src/main/java/org/hisp/dhis/DhisConvenienceTest.java	2015-03-10 11:36:58 +0000
@@ -89,6 +89,7 @@
 import org.hisp.dhis.program.ProgramTrackedEntityAttribute;
 import org.hisp.dhis.relationship.RelationshipType;
 import org.hisp.dhis.sqlview.SqlView;
+import org.hisp.dhis.sqlview.SqlViewType;
 import org.hisp.dhis.trackedentity.TrackedEntity;
 import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
 import org.hisp.dhis.trackedentity.TrackedEntityAttributeGroup;
@@ -1309,7 +1310,7 @@
         sqlView.setName( "SqlView" + uniqueCharacter );
         sqlView.setDescription( "Description" + uniqueCharacter );
         sqlView.setSqlQuery( sql );
-        sqlView.setQuery( false );
+        sqlView.setType( SqlViewType.VIEW );
 
         return sqlView;
     }

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/AddSqlViewAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/AddSqlViewAction.java	2015-02-11 22:54:43 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/AddSqlViewAction.java	2015-03-10 11:36:58 +0000
@@ -30,6 +30,7 @@
 
 import org.hisp.dhis.sqlview.SqlView;
 import org.hisp.dhis.sqlview.SqlViewService;
+import org.hisp.dhis.sqlview.SqlViewType;
 
 import com.opensymphony.xwork2.Action;
 
@@ -75,11 +76,11 @@
         this.sqlquery = sqlquery;
     }
     
-    private boolean query;
+    private String type;
 
-    public void setQuery( boolean query )
+    public void setType( String type )
     {
-        this.query = query;
+        this.type = type;
     }
 
     // -------------------------------------------------------------------------
@@ -94,7 +95,7 @@
         sqlView.setName( name );
         sqlView.setDescription( description );
         sqlView.setSqlQuery( sqlquery );
-        sqlView.setQuery( query );
+        sqlView.setType( SqlViewType.valueOf( type ) );
 
         sqlViewService.saveSqlView( sqlView.cleanSqlQuery() );
 

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/RemoveSqlViewAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/RemoveSqlViewAction.java	2015-02-11 22:54:43 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/RemoveSqlViewAction.java	2015-03-10 11:36:58 +0000
@@ -29,6 +29,8 @@
  */
 
 import com.opensymphony.xwork2.Action;
+
+import org.hisp.dhis.sqlview.SqlView;
 import org.hisp.dhis.sqlview.SqlViewService;
 
 /**
@@ -69,7 +71,9 @@
     public String execute()
         throws Exception
     {
-        sqlViewService.deleteSqlView( sqlViewService.getSqlView( id ) );
+        SqlView sqlView = sqlViewService.getSqlView( id );
+        
+        sqlViewService.deleteSqlView( sqlView );
 
         return SUCCESS;
     }

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java	2015-02-12 19:37:50 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/java/org/hisp/dhis/dataadmin/action/sqlview/ValidateAddUpdateSqlViewAction.java	2015-03-10 11:36:58 +0000
@@ -32,6 +32,7 @@
 import org.hisp.dhis.i18n.I18n;
 import org.hisp.dhis.sqlview.SqlView;
 import org.hisp.dhis.sqlview.SqlViewService;
+import org.hisp.dhis.sqlview.SqlViewType;
 
 import com.opensymphony.xwork2.Action;
 
@@ -140,7 +141,7 @@
 
         try
         {
-            SqlView sqlView = new SqlView( name, sqlquery, false ); // Avoid variable check
+            SqlView sqlView = new SqlView( name, sqlquery, SqlViewType.VIEW ); // Avoid variable check
             
             sqlViewService.validateSqlView( sqlView, null, null );
         }

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties	2015-02-20 14:53:31 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/resources/org/hisp/dhis/dataadmin/i18n_module.properties	2015-03-10 11:36:58 +0000
@@ -188,8 +188,10 @@
 sql_view=SQL View
 sql_type=SQL type
 sql_view_type=SQL view
+materialized_sql_view_type=Materialized SQL view
 sql_query_type=SQL query
 created_in_database=created in database
+materialized_in_database=materialized in database
 allows_for_variables=allows for variables
 sql_statement=SQL Statement
 run=Execute query

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/addSqlViewForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/addSqlViewForm.vm	2015-02-11 22:32:01 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/addSqlViewForm.vm	2015-03-10 11:36:58 +0000
@@ -18,11 +18,12 @@
 			<td><textarea id="description" name="description"></textarea></td>
 		</tr>
 		<tr>
-			<td><label for="query">$encoder.htmlEncode( $i18n.getString( "sql_type" ) )</label></td>
+			<td><label for="type">$encoder.htmlEncode( $i18n.getString( "sql_type" ) )</label></td>
 			<td>
-				<select id="query" name="query">
-					<option value="false">$i18n.getString( "sql_view_type" ) ($i18n.getString( "created_in_database" ))</option>
-					<option value="true">$i18n.getString( "sql_query_type" ) ($i18n.getString( "allows_for_variables" ))</option>
+				<select id="type" name="type">
+					<option value="VIEW">$i18n.getString( "sql_view_type" ) ($i18n.getString( "created_in_database" ))</option>
+					<option value="MATERIALIZED_VIEW">$i18n.getString( "materialized_sql_view_type" ) ($i18n.getString( "materialized_in_database" ))</option>
+					<option value="QUERY">$i18n.getString( "sql_query_type" ) ($i18n.getString( "allows_for_variables" ))</option>
 				</select>
 			</td>
 		</tr>

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/updateSqlViewForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/updateSqlViewForm.vm	2015-02-12 09:51:39 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataadmin/src/main/webapp/dhis-web-maintenance-dataadmin/updateSqlViewForm.vm	2015-03-10 11:36:58 +0000
@@ -2,6 +2,14 @@
 
 <h3>$encoder.htmlEncode( $i18n.getString( "update_sql_view" ) )</h3>
 
+#if( "VIEW" == $sqlViewObject.type )
+#set( $type = $i18n.getString( "sql_view_type" ) )
+#elseif( "MATERIALIZED_VIEW" == $sqlViewObject.type )
+#set( $type = $i18n.getString( "materialized_sql_view_type" ) )
+#elseif( "QUERY" == $sqlViewObject.type )
+#set( $type = $i18n.getString( "sql_query_type" ) )
+#end
+
 <form id="updateSqlViewForm" action="updateSqlViewInstance.action" method="post" class="inputForm">
 
 	<div>
@@ -28,10 +36,10 @@
 		</tr>
 		<tr>
 			<td><label>$encoder.htmlEncode( $i18n.getString( "sql_type" ) )</label></td>
-			<td><input type="text" disabled="disabled" value="#if( $sqlViewObject.query == true )$i18n.getString( "sql_query_type" )#else$i18n.getString( "sql_view_type" )#end"/></td>
+			<td><input type="text" disabled="disabled" value="${type}"/></td>
 		</tr>
 		<tr>
-			<td><label for="sql_statement">$encoder.htmlEncode( $i18n.getString( "sql_statement" ) ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
+			<td><label for="sqlquery">$encoder.htmlEncode( $i18n.getString( "sql_statement" ) ) <em title="$i18n.getString( 'required' )" class="required">*</em></label></td>
 			<td>
 				<textarea type="text" id="sqlquery" name="sqlquery" style="width:80em;height:20em">$!encoder.htmlEncode( $!sqlViewObject.sqlQuery )</textarea>
 			</td>