2013-07-25 2 views
2

Webkit-sqlite 어댑터에 문제가 있습니다. 어떻게 든 정수가 아닌 문자열 형식으로 key을 저장합니다. 인덱싱 된 db는 정상적으로 작동합니다. 키를 문자열로 변환하지 않습니다. 아래 코드를 참조하십시오.Lawnchair의 webkit-sqlite 어댑터가 key를 string으로 변환하는 이유는 무엇입니까?

var ppl = Lawnchair({adapter: 'webkit-sqlite', name:'people', record:'person'}, function(people) { 
    // anon fn bound to the instance 
    this.save({key:1, id:1, a:1, name:'nino'}, function(obj){ 
     console.log(obj); 
    }); 

    // anon fn bound to the instance 
    this.save({key:'2', id:2, a:2, name:'paolo'}, function(obj){ 
     console.log(obj); 
    }); 

    // get all the keys 
    this.keys(function(keys) { 
     console.log('keys:', keys); 
    }); 

    // get 1 
    this.get(1, function(key) { 
     console.log('key:', key); 
    }); 

    // get '2' 
    this.get('2', function(key) { 
     console.log('key:', key); 
    }); 

    // we can also clear the entire collection w/ nuke 
    this.nuke() 
}); 

출력 :

undefined 
Object {key: 1, id: 1, a: 1, name: "nino"} 
Object {key: "2", id: 2, a: 2, name: "paolo"} 
keys: ["1.0", "2"] 
key: undefined 
key: Object {key: "2", id: 2, a: 2, name: "paolo"} 

오류 :

는이에 대한 누군가가 패치를 가지고 있습니까 keys: [1, "2"]

있어야 keys: ["1.0", "2"]를 참조하십시오?

감사합니다.

답변

2

아이러니하게도, 나는 lawnchair를 실험하는 것과 정확히 똑같은 문제를 안고있었습니다. 궁극적으로 webkit-sqlite 어댑터를 수정하여 db에 전달되기 전에 키 값을 문자열로 변환하는 줄을 추가/편집하기로 결정했습니다. 문제는 lawnchair 키 값으로 사용되는 필드 (이 경우 id)가 호환성 이유로 인해 합리적인 이유로 NVARCHAR (32) 데이터 유형으로 설정되어야한다는 사실에서 기인합니다. 정수형 id 필드를 사용하여 webkit-sqlite db를 사용할 수 있지만 lawnchair와 통합하려고하면 복잡하거나 불가능할 수 있습니다. 내 솔루션은 DB에 전달되기 전에 숫자 값을 문자열로 변환하는 것이 었습니다. 어댑터를 수정하지 않고도이 작업을 수행 할 수 있지만, 제 목적으로는 indexeddb를 사용할 수있을 때 정수로 정수를 사용하고 싶었습니다. 웹킷 - sqlite가 어댑터에 내 코드 수정이있는 라인이 강조되어 http://wemarketyour.com/lawnchair-using-indexeddb-websql-dom-localstorage-adapters/

: 여기

내 코드에 대한 링크입니다. 내 버전과의 차이점은 여전히 ​​문자열로 변환하는 동안 데이터가 보존된다는 것입니다. 따라서 int 1 => string "1.0"대신 int 1 => string "1"을 얻습니다. 나중에 데이터를 검색 할 때 parseInt (key)를 사용하여 키를 다시 정수로 변환 할 수 있습니다.