2016-04-16 4 views
1

コード: - ブートへの添字付きアクセス権を持つ場所で

Method RefineSearch(pNewCriteria As %String) As %Status [ ZenMethod ] 
{ 
    set tSC = $$$OK 
    try { 
     set ..criteria = ..criteria _$s(..criteria="":"",1:",")_pNewCriteria 

     set tType = $piece(pNewCriteria,":",1) 
     if tType="prop" { 
      set tSQL = "SELECT ID FROM "_..tableName_" WHERE "_$piece(pNewCriteria,":",2)_" = '"_$piece(pNewCriteria,":",3)_"' AND %ID %FIND Demo_SearchPortal.Find("_..qid_")" 
      set tResult = ##class(%SQL.Statement).%ExecDirect(,tSQL) 
      while tResult.%Next() { 
       set tID = tResult.%GetData(1) 
       $$$IFBITOFFPOS(tID,tChunk,tPos) 
       set $bit(tBits(tChunk),tPos)=1 // <-- HERE 
      } 
      // compress bitmaps 
      set tMaxChunk=$order(tBits(""),-1) 
      for tChunk = 1:1:tMaxChunk { 
       set tBits(tChunk) = $bitlogic(tBits(tChunk)) 
      } 
     } else { 
      set tFinder = $classmethod(..className, ..indexName_"Embedded") 
      if (tType = "entity") { 
       do tFinder.PrepareFind("{"_$piece(pNewCriteria,":",2)_"}", ..searchMode) 
      } elseif (tType = "word") { 
       do tFinder.PrepareFind($piece(pNewCriteria,":",2), ..searchMode) 
      } 
      merge tOldBits = ^CacheTemp.IF.SearchPortal.Query(..qid,"b") 
      set tChunk="" 
      for { 
       set tBits = tFinder.NextChunk(.tChunk) 
       quit:tChunk="" 
       set tBits(tChunk)=$bitlogic(tBits & tOldBits(tChunk)) 
      } 
     } 

     set tNewQID = $i(^CacheTemp.IF.SearchPortal.Query) 
     merge ^CacheTemp.IF.SearchPortal.Query(tNewQID,"b") = tBits 
     set ^CacheTemp.IF.SearchPortal.Query(tNewQID, "parent") = ..qid 
     set ..qid = tNewQID 

    } catch (ex) { 
     set tSC = ex.AsStatus() 
    } 
    quit tSC 
} 

<-- HEREをマークし、これはtBitsの最初の発生があります。

これは本当に有効ですか?

答えて

2

はい$bitは、SETコマンドの左側の機能として使用できます。この場合は法的な変数も使用できます。この変数が未定義の場合、新しい値が得られます。同様に$bitも利用可能です$piece$extract、あなたはそれを見ることができますdocumentation

+0

そして、$ listbuild()あまりにも、右ですか?しかし、ここで$ data(tBits)は何を返すでしょうか?偽ですか? – fge

+0

はい$ listbuildと$ listitemもあります。 $ dataは、0,1,10,11のいずれかの値のみを返します。したがって、このコマンド 'set $ bit(tBits(tChunk)、tPos)= 1'の後、' $ data(tBits) 'は10または11でなければなりません。 – DAiMor

関連する問題