1. //http://www.html580.com   
  2. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLTableSprite', {   
  3.     extend: 'Ext.draw.Sprite',   
  4.     alias: ['widget.sqltablesprite'],   
  5.     bConnections: false,   
  6.     startDrag: function(id){   
  7.         var me = this, win, sqlTablePanel, xyParentPos, xyChildPos;   
  8.            
  9.         // get a reference to a sqltable   
  10.         win = Ext.getCmp(id);   
  11.            
  12.         // get the main sqlTablePanel   
  13.         sqlTablePanel = Ext.getCmp('SQLTablePanel');   
  14.            
  15.         // get the main sqlTablePanel position   
  16.         xyParentPos = sqlTablePanel.el.getXY();   
  17.            
  18.         // get the size of the previously added sqltable   
  19.         xyChildPos = win.el.getXY();   
  20.            
  21.         me.prev = me.surface.transformToViewBox(xyChildPos[0] - xyParentPos[0] + 2, xyChildPos[1] - xyParentPos[1] + 2);   
  22.     },   
  23.        
  24.     onDrag: function(relPosMovement){   
  25.         var xy, me = this, attr = this.attr, newX, newY;   
  26.         // move the sprite   
  27.         // calculate new x and y position   
  28.         newX = me.prev[0] + relPosMovement[0];   
  29.         newY = me.prev[1] + relPosMovement[1];   
  30.         // set new x and y position and redraw sprite   
  31.         me.setAttributes({   
  32.             x: newX,   
  33.             y: newY   
  34.            
  35.         }, true);   
  36.     }   
  37. });    
  38.    
  39. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLTableModel', {   
  40.     extend: 'Ext.data.Model',   
  41.     fields: [{   
  42.         name: 'id',   
  43.         type: 'string'   
  44.     }, {   
  45.         name: 'tableName',   
  46.         type: 'string'   
  47.     }, {   
  48.         name: 'tableAlias',   
  49.         type: 'string'   
  50.     }]   
  51. });   
  52.    
  53. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLTableStore', {   
  54.     extend: 'Ext.data.Store',   
  55.     autoSync: true,   
  56.     model: 'Ext.ux.window.visualsqlquerybuilder.SQLTableModel',   
  57.     proxy: {   
  58.         type: 'memory'   
  59.     }   
  60. });   
  61.    
  62. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLJoin', {   
  63.     extend: 'Ext.data.Model',   
  64.     fields: [{   
  65.         name: 'id',   
  66.         type: 'string'   
  67.     }, {   
  68.         name: 'leftTableId',   
  69.         type: 'string'   
  70.     }, {   
  71.         name: 'rightTableId',   
  72.         type: 'string'   
  73.     }, {   
  74.         name: 'leftTableField',   
  75.         type: 'string'   
  76.     }, {   
  77.         name: 'rightTableField',   
  78.         type: 'string'   
  79.     }, {   
  80.         name: 'joinCondition',   
  81.         type: 'string'   
  82.     }, {   
  83.         name: 'joinType',   
  84.         type: 'string'   
  85.     }],   
  86.     createUUID: function(){   
  87.         // http://www.ietf.org/rfc/rfc4122.txt   
  88.         var s = [];   
  89.         var hexDigits = "0123456789abcdef";   
  90.         for (var i = 0; i < 36; i++) {   
  91.             s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);   
  92.         }   
  93.         s[14] = "4"// bits 12-15 of the time_hi_and_version field to 0010   
  94.         s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01   
  95.         s[8] = s[13] = s[18] = s[23] = "-";   
  96.            
  97.         var uuid = s.join("");   
  98.         return uuid;   
  99.     }   
  100. });   
  101.    
  102. Ext.define('Ext.ux.window.visualsqlquerybuilder.JoinStore', {   
  103.     extend: 'Ext.data.Store',   
  104.     autoSync: true,   
  105.     model: 'Ext.ux.window.visualsqlquerybuilder.SQLJoin',   
  106.     proxy: {   
  107.         type: 'memory'   
  108.     }   
  109. });   
  110.    
  111. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLFieldsModel', {   
  112.     extend: 'Ext.data.Model',   
  113.     fields: [{   
  114.         name: 'id',   
  115.         type: 'string'   
  116.     }, {   
  117.         name: 'tableName',   
  118.         type: 'string'   
  119.     }, {   
  120.         name: 'tableId',   
  121.         type: 'string'   
  122.     }, {   
  123.         name: 'extCmpId',   
  124.         type: 'string'   
  125.     }, {   
  126.         name: 'tableAlias',   
  127.         type: 'string'   
  128.     }, {   
  129.         name: 'field',   
  130.         type: 'string'   
  131.     }, {   
  132.         name: 'output',   
  133.         type: 'boolean'   
  134.     }, {   
  135.         name: 'expression',   
  136.         type: 'string'   
  137.     }, {   
  138.         name: 'aggregate',   
  139.         type: 'string'   
  140.     }, {   
  141.         name: 'alias',   
  142.         type: 'string'   
  143.     }, {   
  144.         name: 'sortType',   
  145.         type: 'string'   
  146.     }, {   
  147.         name: 'sortOrder',   
  148.         type: 'int'   
  149.     }, {   
  150.         name: 'grouping',   
  151.         type: 'boolean'   
  152.     }, {   
  153.         name: 'criteria',   
  154.         type: 'string'   
  155.     }]   
  156. });   
  157.    
  158. Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLFieldsStore', {   
  159.     extend: 'Ext.data.Store',   
  160.     autoSync: true,   
  161.     model: 'Ext.ux.window.visualsqlquerybuilder.SQLFieldsModel',   
  162.     proxy: {   
  163.         type: 'memory'   
  164.     }   
  165. });   
  166.    
  167.