/*
 * JSMin
 * Javascript Compressor
 * http://www.crockford.com/
 * http://www.smallsharptools.com/Projects/Packer/
*/

// V:\1.1.007\js\lib\ext-namirial\Ext.ux.Namirial.data.StructureStore.js

Ext.namespace('Ext.ux');Ext.namespace('Ext.ux.Namirial');Ext.namespace('Ext.ux.Namirial.data');Ext.ux.Namirial.data.StructureStore=Ext.extend(Ext.data.JsonStore,{constructor:function(c){this.addEvents('initexception','loadexception','initialize','tableload','emptytables');Ext.ux.Namirial.data.StructureStore.superclass.constructor.call(this,Ext.apply(c,{gearsConn:c.gearsConn,remoteSort:true,proxy:c.proxy||(!c.data?new Ext.data.HttpProxy({url:c.url}):undefined),reader:new Ext.data.JsonReader()}));this.tables=[];this.i=0;this.sqlTables=new Array();this.sqlViews=new Array();this.reset=false;},init:function(del){this.reset=del||false;if(del){var serialID=generateSerialID();session.setSerialID(serialID);}else{if(Ext.isEmpty(session.getSerialID())){var serialID=generateSerialID();session.setSerialID(serialID);}
session.getSerialID();}
var check=this.gearsConn.queryBy("SELECT name FROM SQLite_Master WHERE name = '"+ANAGRAFICA_TAB+"'");if((check.totalRows==0)||this.reset){log.debug("Inizializzazione struttura");log.time("structime");var tabelle=this.getTables('TABLES');for(var i=0,len=tabelle.length;i<len;i++){this.sqlTables.push('drop table if exists '+tabelle[i]);}
tabelle=this.getTables('VIEWS');for(var i=0,len=tabelle.length;i<len;i++){this.sqlTables.push('drop view if exists '+tabelle[i]);}
var o={url:this.url,reader:new Ext.data.JsonReader({totalProperty:'totalRows',root:'rows'},Ext.data.Record.create([{name:'table'}])),callback:this.readTables,scope:this,params:{table:'ALL',mode:'TABLENAME'}};this.activeRequest=this.proxy.load(o.params,o.reader,o.callback,this)}
else{this.tables=this.getTables('TABLES');this.fireEvent("initialize",this);}},readTables:function(response){delete this.activeRequest;if(!response.success){this.fireEvent("initexception",this,'readTablesFail',response);return;}
try{var tables=response.records;var tableParam='';for(var i=0,len=tables.length;i<len;i++){var tableName=tables[i].get('table');if(tableName.slice(0,4)!='_sys'&&tableName!='vSOSIMPW')
tableParam+=tableName+';';}
log.time('struttura');this.loadTable(tableParam.slice(0,-1));}
catch(e){this.fireEvent("initexception",this,'readTablesGearsFail',e);return;}},loadTable:function(tables){var o={url:this.url,reader:new Ext.data.JsonReader({totalProperty:'totalRows',root:'rows'},Ext.data.Record.create([{name:'table'},{name:'script'}])),callback:this.readResponse,scope:this,params:{table:tables,db:session.userDb}};this.activeRequest=this.proxy.load(o.params,o.reader,o.callback,this)},readResponse:function(response){delete this.activeRequest;if(!response.success){this.fireEvent("initexception",this,'readResponseFail',response);return;}
var table=response.records[0];var name=table.get('table');for(var i=0;i<response.totalRecords;i++){var script=response.records[i].get('script');if(script.replace(/ /g,'').indexOf('CREATEVIEW')>-1){this.sqlViews.push(script)}else{this.sqlTables.push(script)}}
var sql=this.sqlTables.concat(this.sqlViews);this.gearsConn.transaction(sql);log.time('struttura');this.fireEvent("initialize",this);log.debug("Inizializzazione struttura completata");log.timeEnd("structime");},getTables:function(type){type=type||'ALL';var clause;switch(type){case'TABLES':clause="type = 'table'";break;case'VIEWS':clause="type = 'view'";break;default:clause="type = 'table' OR type = 'view'";break;}
var row=this.gearsConn.queryBy("SELECT * FROM SQLite_Master WHERE "+clause+" ORDER BY name ASC");var tables=[];for(var i=0,len=row.totalRows;i<len;i++){if(row.rows[i].name!='sqlite_sequence')
tables.push(row.rows[i].name)}
return tables;},emptyTables:function(tablesList){log.time('emptyTableTime');tablesList=tablesList||this.tables
var sql=new Array();for(var i=0,len=tablesList.length;i<len;i++){sql.push('DELETE FROM '+tablesList[i]+' WHERE 1 = 1');}
try{this.gearsConn.transaction(sql);}catch(e){log.error('structureStore.emptyTables - Errore: ',e);}
log.timeEnd('emptyTableTime');this.fireEvent('emptytables');return;},getColsModel:function(tab,id){var cols=[];var columns=this.gearsConn.queryBy('SELECT sql FROM SQLite_master WHERE name = "'+tab+'"');if(!columns){return false;}
var values=columns.rows[0].sql.match(/\[\w+]\s+(INTEGER|TEXT\s*\(\d+\)|FLOAT|BLOB|BOOLEAN|GUID)(\s+NOT\s+NULL\s+PRIMARY\s+KEY|\s+NOT\s+NULL|s*)/gi)
for(var i=0;i<values.length;i++){fieldname=values[i].match(/\w+/gi)[0];datatype=values[i].match(/(INTEGER|TEXT|FLOAT|BLOB|BOOLEAN|GUID)/gi)[0];nullable=values[i].match(/\s+NOT\s+NULL/gi)==null;cols.push({header:fieldname,sortable:true,dataIndex:fieldname,width:100})}
return cols;},convertType:function(rtype){switch(rtype){case'BIGINT':case'INT':case'SMALLINT':case'TINYINT':return'int';break;case'BIT':return'boolean';break;case'DECIMAL':case'NUMERIC':case'MONEY':case'SMALLMONEY':case'FLOAT':case'REAL':return'float';break;case'DATETIME':case'SMALLDATETIME':case'TIMESTAMP':return'date';break;case'CHAR':case'VARCHAR':case'TEXT':case'NCHAR':case'NVARCHAR':case'NTEXT':case'BINARY':case'VARBINARY':default:return'string';break;}},getFields:function(tab,pref,indexed,alias){indexed=indexed||false;alias=alias||false;pref=(Ext.isEmpty(pref))?(''):(pref+'_');var columns=this.gearsConn.queryBy('SELECT sql FROM SQLite_master WHERE name = "'+tab+'"');if(!columns){return false;}
var fields=[];var values=columns.rows[0].sql.match(/\[\w+]\s+(INTEGER|TEXT\s*\(\d+\)|FLOAT|BLOB|BOOLEAN|GUID)(\s+NOT\s+NULL\s+PRIMARY\s+KEY|\s+NOT\s+NULL|s*)/gi)
for(var i=0;i<values.length;i++){fieldname=values[i].match(/\w+/gi)[0];datatype=values[i].match(/(INTEGER|TEXT|FLOAT|BLOB|BOOLEAN|GUID)/gi)[0];nullable=values[i].match(/\s+NOT\s+NULL/gi)==null;if(alias){fields.push({name:pref+fieldname,mapping:(indexed)?(indexed++)-1:fieldname,type:this.convertType(datatype.toUpperCase()),as:tab+'.'+fieldname,allowNull:true,convert:unescape})}else{fields.push({name:pref+fieldname,mapping:(indexed)?(indexed++)-1:fieldname,type:this.convertType(datatype.toUpperCase()),allowNull:true,convert:unescape})}}
return fields;},eachTable:function(fn,scope){var tables=this.getTables();try{for(var i=0,len=tables.length;i<len;i++){if(fn.call(scope||this,tables[i],this,i)===false){break;}}}
catch(e){log.error('Ext.ux.Namirial.data - StructureStore.eachTable: errore! -> ',e)
return false}
return this;}})

