1 RedQueryBuilderFactory.create({ 2 targetId : 'rqbVisitor', 3 meta : { 4 tables : [ { 5 "name" : "PERSON", 6 "label" : "Person", 7 "columns" : [ { 8 "name" : "NAME", 9 "label" : "Name", 10 "type" : "STRING", 11 "size" : 10 12 }, { 13 "name" : "DOB", 14 "label" : "Date of birth", 15 "type" : "DATE" 16 }, { 17 "name" : "SEX", 18 "label" : "Sex", 19 "type" : "STRING", 20 "editor" : "SELECT" 21 }, { 22 "name" : "CATEGORY", 23 "label" : "Category", 24 "type" : "REF", 25 } ], 26 fks : [] 27 } ], 28 29 types : [ { 30 "name" : "STRING", 31 "editor" : "TEXT", 32 "operators" : [ { 33 "name" : "=", 34 "label" : "is", 35 "cardinality" : "ONE" 36 }, { 37 "name" : "<>", 38 "label" : "is not", 39 "cardinality" : "ONE" 40 }, { 41 "name" : "LIKE", 42 "label" : "like", 43 "cardinality" : "ONE" 44 }, { 45 "name" : "<", 46 "label" : "less than", 47 "cardinality" : "ONE" 48 }, { 49 "name" : ">", 50 "label" : "greater than", 51 "cardinality" : "ONE" 52 } ] 53 }, { 54 "name" : "DATE", 55 "editor" : "DATE", 56 "operators" : [ { 57 "name" : "=", 58 "label" : "is", 59 "cardinality" : "ONE" 60 }, { 61 "name" : "<>", 62 "label" : "is not", 63 "cardinality" : "ONE" 64 }, { 65 "name" : "<", 66 "label" : "before", 67 "cardinality" : "ONE" 68 }, { 69 "name" : ">", 70 "label" : "after", 71 "cardinality" : "ONE" 72 } ] 73 }, { 74 "name" : "REF", 75 "editor" : "SELECT", 76 "operators" : [ { 77 "name" : "IN", 78 "label" : "any of", 79 "cardinality" : "MULTI" 80 }] 81 } ] 82 }, 83 onLoad : function(instance) { 84 // XXX this really how you get it? 85 this.instance = instance; 86 }, 87 onSqlChange : function(sql, args) { 88 var visitor = new rqb.Visitor(); 89 visitor.visit = function(ctx) { 90 if (ctx.asHasMessages()) { 91 var msg = new rqb.Message('Hello ' + ctx.asHasValue().getValue()); 92 ctx.asHasMessages().showMessage(msg); 93 } 94 } 95 this.instance.accept(visitor); 96 }, 97 enumerate : function(request, response) { 98 if (request.columnName == 'CATEGORY') { 99 response([{value:'A', label:'Small'}, {value:'B', label:'Medium'}]); 100 } else { 101 response([{value:'M', label:'Male'}, {value:'F', label:'Female'}]); 102 } 103 }, 104 editors : [ { 105 name : 'DATE', 106 format : 'dd.MM.yyyy' 107 } ] 108 });