Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
29 / 114 ツリー <前へ | 次へ>

〔832〕定型処理テンプレート不具合 kabe (08/09/05 21:01)

〔839〕CONCAT スカラー関数のバグ Hidemi Oya (08/09/06 21:55)

〔839〕CONCAT スカラー関数のバグ
 Hidemi Oya WEB  (08/09/06 21:55)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 よくよく確認してみたら、1つのクエリー内に CONCAT 集約関数が複数あっても正常に動作しています。なのに、1つのクエリー内に CONCAT スカラー関数が複数存在すると動作がおかしくなる。しかも、複数の結果が最後の結果の値と同じになるということは、結果の値そのものが返るのではなく、値へのポインタが返っているらしい…。
 SQLite へテキスト値を返すときのデストラクタが SQLITE_STATIC と SQLITE_TRANSIENT の2種類があり、集約関数のように SQLite 側で動的に確保したメモリを使用するときは SQLITE_TRANSIENT、スカラー関数のように自分で静的に確保したメモリを使用するときは SQLITE_STATIC だと思ってたんですが、どうもこれが間違いでした。SQLITE_STATIC では結果の値へのポインタが渡され、SQLITE_TRANSIENT では結果の値そのものをコピーが渡されるということのようです。

 ってことで、CONCAT スカラー関数でも SQLITE_TRANSIENT で結果を返すようにしたら、想定どおりの動作をするようになりました。修正版をメールで送りますので、次のバージョンアップの際にお使いください。
 当面は、1クエリー内で使用する CONCAT スカラー関数は1つだけとし、複数使用する場合は || 演算子で結合するようにしてください。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
29 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.