2013-11-15 1 views
4

WebSQL DB에서 행을 가져 왔는데 반환 된 행은 읽기 전용 인 것 같습니다.WebSQL : SQLResultSetRowList의 반환 된 행을 변경할 수 있습니까?

db.readTransaction(
     function(t1) {    
      t1.executeSql(
       "SELECT * FROM Foo WHERE id = ?", 
       [1], 
       function(t2, resultSet){ 
        var foo = resultSet.rows.item(0); 

        console.log("before: " + foo.col1); 
        foo.col1 = "new value"; 
        console.log("after: " + foo.col1); 
        console.log("sealed? " + Object.isSealed(foo)); 
        console.log("frozen? " + Object.isFrozen(foo)); 
       } 
      ); 
     } 
    ); 

그것은 인쇄 :

before: old value 
    after: old value 
    sealed? false 
    frozen? false 

내가 수동으로 수정할 수 있도록 행을 복제했다.

어떻게 가능합니까? 고정시키지 않고 물체를 어떻게 변경할 수 있습니까? 그리고 the specs에서 그 부분이 그렇게되어야한다고 말했습니까?


업데이트 : 재미 있습니다. 일부 테이블에서만 발생합니다. 아직 그것에 대해 우둔.


업데이트 2 : 아니요, 내가 읽은 모든 테이블에서 발생합니다. Chrome과 관련된 것으로 보입니다 (Opera에서도 발생하므로 웹킷 동작 일 수 있음).

+1

관련 항목 : http://stackoverflow.com/questions/5093870/immutable-chrome-sqlite-return-objects –

답변

3

Web SQL SpecSQLResultSetRowListSQLResultSet 인터페이스는 읽기 전용입니다.

+0

행 목록은 가능하지만 행은 무엇입니까? –

+0

@MisterSmith 또한 읽기 전용입니다. –

+0

행이 읽기 전용인지 여부에 대한 스펙에는 아무 것도 없습니다. 'SQLResultSet'의 속성은 읽기 전용으로, 그리고'SQLResultSetRowList'의'length' 속성으로 정의됩니다. 반환되는리스트의 항목에는 정의되어 있지 않습니다. 나는 WebKit 개발자들이 스스로 이것을했다고 생각한다. 그리고 독창적 인 JavaScript에는 읽기 전용 객체가 없기 때문에 놀랍습니다. –