更新以添加第二次修复
经过反复试验,我找到了解决此问题的方法——一些查询有效,其他查询返回此错误。
修复 1
共同点是 V8 引擎/新编辑器已将查询转换为多行格式时出现此问题。
例如,切换到新的编辑器/V8转换的长文本字符串类似于以下:
var query = "select Street_Number, street_name, street_suffix, street_dir_prefix, postal_code, city, mls, address, unitnumber "
+"as unit, uspsid,latitude,longitude from properties.forsale where status = 'active' and zpid is null and property_type = 'residential'"
此查询导致上述错误。该修复程序将较长的查询更改为连续字符串,如下所示:
var query = "select Street_Number, street_name, street_suffix, street_dir_prefix, postal_code, city, mls, address, unitnumber as unit, uspsid,latitude,longitude from properties.forsale where status = 'active' and zpid is null and property_type = 'residential'"
修复 2
这个有点令人沮丧。在与数据库的连接方面,V8 并没有那么宽容。在 V8 之前它会自动关闭任何徘徊的连接,但是,看起来 V8 不喜欢那样。我最初编写脚本是为了共享尽可能少的连接,但我注意到有一些我得到了这个错误,并且它是连接可能被“拆分”的那些。例如:
var conn = getconnection() //this is a connection function I have written
var date = date || Utilities.formatDate(new Date(), "America/Chicago", "yyyy-MM-dd");
var keyobj = getkeys(undefined,undefined,conn);
conn = keyobj.conn;
var results = sqltojson(query, true, conn);
上面的函数导致了这个错误,我假设这是因为函数返回了 'conn' 变量,但是,我将做出一个疯狂的假设,无论出于何种原因,连接都不能在一次有两个单独的函数,因为它既被返回并继续作为对象“keyobj”中的一个值,也作为“conn”。在定义 conn 变量后立即添加 delete keyobj.conn 就可以了:
var conn = getconnection() //this is a connection function I have written
var date = date || Utilities.formatDate(new Date(), "America/Chicago", "yyyy-MM-dd");
var keyobj = getkeys(undefined,undefined,conn);
conn = keyobj.conn;
delete keyobj.conn;
var results = sqltojson(query, true, conn);
同时执行这两个修复程序可以阻止此错误并允许脚本继续运行而不会出现问题。