2016-01-23 21 views
4

我正在尋找在Cassandra nodejs-driver(即CQL字符串)中打印結束查詢的方式,以便我可以調試並查看實際進入Cassandra引擎的值。這個怎麼做?如何在Cassandra nodejs-driver中打印結束查詢?

var query = ' select * from shahid.tbl_raw_data where yymmddhh = ? limit ? '; 
var params = [last_yymmddhh_value, settings.records_per_batch]; 

client.execute(query, params, {prepare: true}, function(err, result) 
{   
     console.log(result); 
}); 

我想要得到的字符串這樣

select * from shahid.tbl_raw_data where yymmddhh = '15010101' limit 100

注:這是簡單的例子,我在實際工作中對循環非常複雜的查詢,所以我不想做console.log(last_yymmddhh_value)查看綁定值。

回答

3

你可以試試這個

function dispQuery(query, params) { 
    var params_temp = Array.from(params); 
    return query.replace(/\?/g, function() { 
     return params_temp.shift() 
    }) 
} 

例如,在你的代碼:

client.execute(query, params, {prepare: true}, function(err, result) 
{   
    console.log("Query ::%s",dispQuery(query,params)); 
    console.log("Result ::",result); 
}); 
4

實際獲取由驅動程序執行的查詢是不同的,那麼完整的查詢文本作爲評估工作完成服務器側。

實際發送到服務器的是唯一標識標識準備好的語句和您提供的參數值(請參閱:EXECUTE)。但是,最終您提供的查詢文本是正在評估的內容。

java驅動程序有一個Query Logger concept記錄執行的查詢及其延遲。您可以對其進行配置,使其僅記錄慢速查詢或所有查詢。它還記錄在事先準備好的聲明中使用的參數,即:

DEBUG [cluster1] [/127.0.0.1:9042] Query completed normally, took 9 ms: select * from shahid.tbl_raw_data where yymmddhh = ? limit ? [15010101, 100]; 

沒有對的NodeJS驅動器這樣的構建還,但亞歷克斯rokabilis'答案將在大多數情況下,唯一的例外是你使用命名參數的地方,或者你實際上有'?'列名(這是有效的,但可能不是人們實際上做的事)。我已經登錄NODEJS-220來請求實現這樣的功能。