« すくすくって | Main | おふろアニメって??? »

2004.10.07

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今回はサーバー側が検索条件を受け取る部分をテストで作りました。
#Region "BUILD"
Private Sub Build(ByVal op As String)
Dim op1 As clsCONDbase
Dim op2 As clsCONDbase
Dim s1 As String
Dim s2 As String

Select Case op
Case clsWHERE.Symbol 'WHERE
Me.operand = CType(stack.Pop, clsCONDbase)
Case clsAND.Symbol 'AND
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsAND(op1, op2))
Case clsOR.Symbol 'OR
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsOR(op1, op2))
Case clsEQUAL.Symbol '等号
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsEQUAL(op1, op2))
Case clsNOTEQUAL.Symbol '不等号
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsNOTEQUAL(op1, op2))
Case clsOPEN.Symbol 'カッコ開く
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsOPEN(op1))
Case clsCLOSE.Symbol 'カッコ閉じる
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsCLOSE(op1))
Case clsFIELD.Symbol 'データーベースのフィールド名
s2 = CType(stack.Pop, String)
s1 = CType(stack.Pop, String)
stack.Push(New clsFIELD(s1, s2))
Case clsVALUE.Symbol '値
s1 = CType(stack.Pop, String)
stack.Push(New clsVALUE(s1))
Case Else
stack.Push(op)
End Select
End Sub

#End Region
#Region "IEnumerable"
'XMLの文字列にしたものをoに代入して順に実行される
Public Overrides Sub Add(ByVal o As Object)
Build(CType(o, String))
End Sub
#End Region

送られてきた条件を受け取る(XMLの文字列を逆シリアル化する)ときに、自動的にAddルーチンが必要回数だけ実行されます。
Addルーチンの引数oにはXMLの文字列の通りに条件式の各要素が逆ポーランド記法の順に入れられてきます。

上のプログラムのSELECT文にある
Case clsAND.Symbol とか Case clsOR.Symbol
ですが、
Public Shadows Const Symbol As String = "AND"
Public Shadows Const Symbol As String = "OR"
のように基本クラスの同じ名前の定数を各クラスでShadowsを使って隠してそれぞれの文字を新しく定義しなおしています。

少しばかりテストしてみて、ちゃんと動きそうだったので、この方法を本番のプログラムに採用することにしました。


« すくすくって | Main | おふろアニメって??? »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/4052/1615280

Listed below are links to weblogs that reference は~とデーターベース計画:

« すくすくって | Main | おふろアニメって??? »