 		WeaveAPI.ClassRegistry.registerImplementation(IDataSource, WeaveDataSource, "Weave server");
 
 		private static const SQLPARAMS:String = 'sqlParams';
+		
+		public static var debug:Boolean = false;
 		
 		public function WeaveDataSource()
 		{

								return tableData;
							})
							.then(function(tableData:TableData):WeavePromise {
								return (WeaveAPI.QKeyManager as QKeyManager).getQKeysPromise(
									getTablePromise,
									keyType,
									keyStrings
								).then(function(qkeys:Vector.<IQualifiedKey>):TableData {
									tableData.derived_qkeys = qkeys;
									return tableData;
								});

					{
						var getTablePromise:WeavePromise = new WeavePromise(_service)
							.then(function(..._):AsyncToken {
								if (debug)
									weaveTrace('invoking getTable()', hash);
								return _service.getTable(result.tableId, sqlParams);
							});
						
						var keyStrings:Array;
						promise = getTablePromise
							.then(function(tableData:TableData):TableData {
								if (debug)
									weaveTrace('received', debugId(tableData), hash);
								
								if (!tableData.keyColumns)
									tableData.keyColumns = [];
								if (!tableData.columns)
									tableData.columns = {};
								
								var name:String;
								for each (name in tableData.keyColumns)
									if (!tableData.columns.hasOwnProperty(name))
