рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, Cach├й рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ DBMS рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ
JDBC / ODBC рдбреНрд░рд╛рдЗрд╡рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣ рднреА рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдХреИрдЪ рдХрд╛ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рдмрд╣реБрдЖрдпрд╛рдореА рд╡рд┐рд░рд▓ рд╕рд░рдгрд┐рдпреЛрдВ - рдЧреНрд▓реЛрдмрд▓реНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реИред рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдирдХ Cach├йSQL рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ Cach├й ObjectScript (COS) рдореЗрдВ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдк SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред NoSQL рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ (рдЧреНрд▓реЛрдмрд▓реНрд╕)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреИрдЪ рдорд╛рдирдХ рдХрдХреНрд╖рд╛ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдПрдХ рд╕реАрдорд╛ рд╣реИ: рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╕реАрдУрдПрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рд▓реМрдЯреЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕реЗрдЯ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - i.e. SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ NoSQL рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрдЯ рдХреЗ рддрд╣рдд рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПред
Cach├й рдореЗрдВ SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛
JDBC / ODBC рд╕реЗ рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ Cach├й рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд╡реЗрд░реА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ:

рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд░рд┐рдХреЙрд░реНрдбреНрд╕ (рдкрд░рд┐рдгрд╛рдо), рдпрд╛ рд╕реНрдХреЗрд▓рд░ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирдореВрдирд╛ рдХрд╣реЗрдВрдЧреЗред ODBC рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдореВрдиреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ S.S__ample_y_Name:

SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ, рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд▓реМрдЯреЗрдЧрд╛; рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЬреНрдЮрд╛рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреИрдЪ рдЖрдкрдХреЛ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╛ рддреЛ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ ResultSet рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
ClassMethod SomeSqlProc ( p1 As Integer = 0 ) [ ReturnResultsets , SqlProc ]рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк Cach├й ObjectScript рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ ODBC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ ResultSet (рдпрд╛ рдЕрдзрд┐рдХ) рд▓реМрдЯрд╛рдПрдЧрд╛ред
Cach├й рдХреЗ рдкрд╛рд╕ рджреЛ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреЛ NoSQL рдбреЗрдЯрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ:
рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ред рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ClassMethod SomeSqlProc ( p1 As Integer = 0 ) [ ReturnResultsets , SqlProc ]
{
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( % рдкрд░рд┐рдгрд╛рдо ) рд╕реЗрдЯ рдХрд░реЗрдВ ред % рдирдпрд╛ ( "User.SomeClass: рдХреНрд╡реЗрд░реА" )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рдирд┐рд╖реНрдкрд╛рджрд┐рдд ( p1 )
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВрдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ Cach├й ObjectScript рдореЗрдВ рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдирд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд▓реМрдЯрд╛рдП рдЧрдП ResultSet рдХрд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛% Query рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред # ROWSPEC рдкреИрд░рд╛рдореАрдЯрд░, рдЕрд░реНрдерд╛рддреНред рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордпред
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ред % SQL.CustomResultSet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
% SQL.CustomResultSet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ClassMethod SomeSqlProc ( p1 As Integer = 0 ) [ ReturnResultsets , SqlProc ]
{
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рд╕реЗрдЯ рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( User.MyResultSet )ред % рдирдпрд╛ (, рдкреА 1 )
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
% SQL.CustomResultSet рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ,
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рд╡рд┐рдзрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреНрд▓рд╛рд╕% SQL.CustomResultSet рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ - рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рдиред
рдиреЛрдЯ: рдЖрдк рдЙрд╕реА рддрд░рд╣ SQL рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
SQL рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИClassMethod SomeSqlProc ( p1 As Integer = 0 ) [ ReturnResultsets , SqlProc ]
{
s sqltext = "SELECT * рдлреНрд░реЙрдо dbo.Classname" ##; рд╣рдо рдЕрдиреБрд░реЛрдз рдкрд╛рда рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( % рдкрд░рд┐рдгрд╛рдо ) рд╕реЗрдЯ рдХрд░реЗрдВ ред % рдирдпрд╛ ( "% рдбрд╛рдпрдиреЗрдорд┐рдХрд╡рд┐рдХреНрдпреВ: рдПрд╕рдХреНрдпреВрдПрд▓" )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рддреИрдпрд╛рд░ ( sqltext )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ()
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ SQL рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Cach├й ObjectScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ Cach├й рдХреА рдЖрдкреВрд░реНрддрд┐ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдзрди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдирд╛
рд╕рдорд╕реНрдпрд╛ рдХреЗ 4 рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
- рд░рди рдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди, рдЙрддреНрдкрдиреНрди-рдкрд░-рдЙрдбрд╝рд╛рди ROWSPEC рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреНрд╡реЗрд░реА рдпреБрдХреНрдд рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ;
- рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдордп рдореЗрдВ, рдлрд╝реАрд▓реНрдб рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде% SQL.CustomResultSet рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ;
- % SQL.CustomResultSet рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рдХреЙрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рди рдЯрд╛рдЗрдо рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдирд╣реАрдВ;
- % Query рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рдореИрдВрдиреЗ рдЖрдЦрд┐рд░реА рддрд░реАрдХрд╛ рдЪреБрдирд╛ - рдпрд╣ рдореБрдЭреЗ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛ (рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЕрднреА рднреА рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, User.Query рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ% Query рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдВ - рддрд╛рдХрд┐ рд╕рднреА% рдХреНрд╡реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред % Query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЙрдкрднреЛрдХреНрддрд╛ (% ResultSet) рджреЛ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ: GetInfo рдФрд░ GetODBCetfoред рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдореЗрдВ, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдХрдИ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ) рдореБрдЭреЗ рдЧреЗрдЯрдЗрдВрдлреЛ рдорд╛рдкрджрдВрдбреЛрдВ (.colinfo, .parmininfo, .idinfo, .qHandle, extoption, .extinfo) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред
- colinfo - рдЗрд╕рдореЗрдВ $ lb ($ lb (рдирд╛рдо, рдЯрд╛рдЗрдкрд┐рдб, рдХреИрдкреНрд╢рди), ...) рдЬреЛрдбрд╝реЗрдВ, рдЬрд╣рд╛рдБ рдирд╛рдо рдлрд╝реАрд▓реНрдб рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдирд╛рдо рд╣реИ, рдЯрд╛рдЗрдкрд┐рдб Cach├й рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рдХреИрдкреНрд╢рди рдХреЙрд▓рдо рд╢реАрд░реНрд╖рдХ рд╣реИ;
- parminfo - рдЗрд╕рдореЗрдВ $ lb рдЬреЛрдбрд╝реЗрдВ ($ lb (рдирд╛рдо, рдЯрд╛рдЗрдкрд┐рдб), ...) - рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк, рд▓реЗрдХрд┐рди рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рдмрд┐рдирд╛;
- idinfo - рдЖрдк рдЗрд╕рдореЗрдВ $ lb (0,0) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд┐рд╕реНрдЯрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА, рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ);
- qHandle - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдЧрдард┐рдд рдмрд╣реБрдЖрдпрд╛рдореА рд╕реНрдерд╛рдиреАрдп рд╕рд░рдгреА;
- рдмрд╛рдХреА рдХреЛ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ)ред
GetODBCInfo рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдХреБрдЫ рдФрд░ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХрд▓-рд╕реНрддрд░реАрдп рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕рдорд╛рди рд╣реИред
GetInfo рдФрд░ GetODBCInfo рд╕реЗ рд╕рд╣реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХрдИ рд╕реНрдкрд╖реНрдЯ рдЪрд╛рд▓реЗрдВ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИрдВ:
- Cach├й (рдЯрд╛рдЗрдкрд┐рдб) рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ $ $ externaltype ^% apiOLE (ctype, .type, "0") рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ Cach├й рдореЗрдВ ctype рдирд╛рдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,% рд╕реНрдЯреНрд░рд┐рдВрдЧ [% рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн])ред рдлрд╝рдВрдХреНрд╢рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЯрд╛рдЗрдк (ctype) рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (Package.Class рдкрд░ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ), рдпрд╣ рдореИрдХреНрд░реЛ $$$ NormalizeClassname (ctype) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
GetODBCInfo рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
GetODBCColInfo ^% ourODBC ( ctype ; ColParms ред, ColODBCTNName ; ColODBCType ред, MaxLen ред, рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ , рд╕реНрдХреЗрд▓ ) ред
рдЬрд╣рд╛рдВ Cach├й рдореЗрдВ ctype рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ, рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЪреВрдВрдХрд┐ рд╣рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░) рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдХреНрд╡реЗрд░реА рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ qHandle рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╣реИред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо ResultSet рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди (QueryExecute) рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП ROWSPEC рд▓рд╛рдЗрди рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд░реЗрдЦрд╛ (ROWSPEC рдХреЗ рд╕рдорд╛рди) рдмрдирд╛рдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ qHandle ("rowspec") рдФрд░ qHandle ("params") рдореЗрдВ рдбрд╛рд▓реЗрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо User.Query рд╡рд░реНрдЧ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╡рд░реНрдЧ User.Query% рдХреНрд╡реЗрд░реА рдмрдврд╝рд╛рддрд╛ рд╣реИ
{
ClassMethod GetInfo ( ByRef colinfo as % List , ByRef parminfo as % List , ByRef idinfo as % List , ByRef qHandle%% рдХреЗ рд░реВрдк рдореЗрдВ , extoption as % Intex = 0 , ByRef extinfo as % List ) % рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ
{
рдЕрдЧрд░ $ рдорд┐рд▓рддрд╛ рд╣реИ ( qHandle ( "colinfo" )) = ""
{
рд╕реЗрдЯ рд░реЛрд╕реНрдкреЗрдХ = рдХреНрдпреВрд╣реИрдВрдбрд▓ ( "рд░реЛрд╕реНрдкреЗрдХ" )
рд╕реЗрдЯрд╣реИрдВрдбрд▓ ( "рдХреЙрд▓рд┐рдирдлреЛ" ) = ""
рд╕реЗрдЯ sc = $$$ рдареАрдХ рд╣реИ
i = 1: 1: $ рд▓рдВрдмрд╛рдИ ( рд░реЛрд╡реЗрд╕реЗрдХ , "," )
{
рд╕реЗрдЯ рдХрд░реНрд▓ = $ рдЯреБрдХрдбрд╝рд╛ ( рд░реЛрд╡реЗрд╕реЗрдХ , "," , рдЖрдИ )
рд╕реЗрдЯ рдирд╛рдо = "p" _ i
ctype = $$$ normalizeClassname ( $ select ( $ piece ( col , ":" , 2) '' = "" : $ piece ( col , ": 2), 1: "% String " ))
рд╕реЗрдЯ sc = $$ рдЖрдЙрдЯрд░рд╛рдЗрдк ^% рдПрдкреАрдУрдПрд▓рдИ (ctype; рдЯрд╛рдЗрдк , "0"ред
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : $ $ $ ISERR ( sc )
рд╕реЗрдЯ рдХреИрдкреНрд╢рди = $ рдЯреБрдХрдбрд╝рд╛ ( рдХреЙрд▓ , ":" , 1)
qHandle ( "colinfo" ) = qHandle ( "рдХреЙрд▓рд┐рдирдлрд╝реЛ" ) _ $ рд╕реВрдЪреА рдмрдирд╛рдирд╛ ( $ рд╕реВрдЪреА рдмрдирд╛рдирд╛ ( рдирд╛рдо , рдкреНрд░рдХрд╛рд░ , рд╢реАрд░реНрд╖рдХ ))
}
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : $ $ $ ISERR ( sc ) sc
}
рдЕрдЧрд░ $ рдорд┐рд▓рддрд╛ рд╣реИ ( qHandle ( "parminfo" )) = ""
{
рд╕реЗрдЯ рдкрд░рдо = qHandle ( " рдкрд░рдо " )
рд╕реЗрдЯрд╣реИрдВрдбрд▓ ( "рдкрд░реНрдореАрдВрдлреЛ" ) = ""
рд╕реЗрдЯ sc = $$$ рдареАрдХ рд╣реИ
i = 1: 1: $ рд▓рдВрдмрд╛рдИ ( рдкрд░рдореЗрд╕ , "," )
{
рд╕реЗрдЯ рдХрд░реНрд▓ = $ рдЯреБрдХрдбрд╝рд╛ ( рдкрд░рдо , "," , i )
рд╕реЗрдЯ рдирд╛рдо = "p" _ i
ctype = $$$ normalizeClassname ( $ select ( $ piece ( col , ":" , 2) '' = "" : $ piece ( col , ": 2), 1: "% String " ))
рд╕реЗрдЯ sc = $$ рдЖрдЙрдЯрд░рд╛рдЗрдк ^% рдПрдкреАрдУрдПрд▓рдИ (ctype; рдЯрд╛рдЗрдк , "0"ред
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : $ $ $ ISERR ( sc )
рд╕реЗрдЯ qHandle ( "parminfo" ) = qHandle ( "parminfo" ) _ $ рд╕реВрдЪреА рдмрдирд╛рдирд╛ ( $ рд╕реВрдЪреА рдмрдирд╛рдирд╛ ( рдирд╛рдо , рдкреНрд░рдХрд╛рд░ ))
}
рдЫреЛрдбрд╝ рджрд┐рдпрд╛ : $ $ $ ISERR ( sc ) sc
}
рд╕реЗрдЯ рдХреЙрд▓рд┐рдирдлреЛ = рдХреНрдпреВрд╣реИрдВрдбрд▓ ( "рдХреЙрд▓рд┐рдирдлреЛ" )
рд╕реЗрдЯ parminfo = qHandle ( "parminfo" )
рд╕реЗрдЯ idinfo = $ рд╕реВрдЪреА рдирд┐рд░реНрдорд╛рдг (0,0)
$ $ $ $ рдареАрдХ рд╣реИ
}
ClassMethod GetODBCInfo ( ByRef colinfo %% рд╕реВрдЪреА , ByRef parminfo %% рд╕реВрдЪреА , ByRef qHandle % Binary )
{ рдпрджрд┐ $ рдорд┐рд▓рддрд╛ рд╣реИ ( qHandle ( "colinfoodbc" )) = ""
{
рд╕реЗрдЯ рд░реЛрд╕реНрдкреЗрдХ = рдХреНрдпреВрд╣реИрдВрдбрд▓ ( "рд░реЛрд╕реНрдкреЗрдХ" )
рд╕реЗрдЯрд╣реИрдВрдбрд▓ ( "рдХреЙрд▓рд┐рдирдлреВрдбрдмреЗрдХ" ) = $ рд╕реВрдЪреА рдирд┐рд░реНрдорд╛рдг ( $ LENGTH ( рд░реЛрд╡реЗрд╕реЗрдХ , "," ))
i = 1: 1: $ рд▓рдВрдмрд╛рдИ ( рд░реЛрд╡реЗрд╕реЗрдХ , "," )
{
рд╕реЗрдЯ рдХрд░реНрд▓ = $ рдЯреБрдХрдбрд╝рд╛ ( рд░реЛрд╡реЗрд╕реЗрдХ , "," , рдЖрдИ )
рд╕реЗрдЯ cype = $ select ( $ piece ( col , ":" , 2) '= "" : $ piece ( col , ":" , 2), 1: "% String" )
GetODBCColInfo ^% ourODBC ( ctype ; ColParms ,ред ColODBCTypeName ; ColODBCType ред, MaxLen ред, рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ , рд╕реНрдХреЗрд▓ ) ред
рд╕реЗрдЯ рдмреНрд░рд╛рд╕ = "$ рдЪрд╛рд░ (0,0,0,0,0,0,0,0,0,0,0,0,0,0)"
рд╕реЗрдЯ рдирд╛рдо = $ рдЯреБрдХрдбрд╝рд╛ ( рдХреЙрд▓ , ":" , 1)
рд╕реЗрдЯ qHandle ( "рдХреЙрд▓рд┐рдирдлреВрдбрдмреИрдВрдХ" ) = qHandle ( "рдХреЙрд▓рд┐рдирдлреВрдбрдмреИрдВрдХ" ) _ $ рд╕реВрдЪреА ( рдирд╛рдо , colodBCType , рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ , рд╕реНрдХреЗрд▓ , 2, рдирд╛рдо , "рдХреНрд╡реЗрд░реА" , "% рд▓рд╛рдЗрдмреНрд░реЗрд░реА , " " , рдмреНрд░реЗрд╕ )
}
}
рдЕрдЧрд░ $ рдорд┐рд▓рддрд╛ рд╣реИ ( qHandle ( "parminfoodbc" )) = ""
{
рд╕реЗрдЯ рдкрд░рдо = qHandle ( " рдкрд░рдо " )
рд╕реЗрдЯрд╣реИрдВрдбрд▓ ( "рдкрд╛рд░реНрдорд┐рдирдлреЙрд░реНрдмрдХ" ) = $ рд╕реВрдЪреА ( $ LENGTH ( рдкрд░рдореЗрд╕ , "," ))
i = 1: 1: $ рд▓рдВрдмрд╛рдИ ( рд░реЛрд╡реЗрд╕реЗрдХ , "," )
{
рд╕реЗрдЯ рдХрд░реНрд▓ = $ рдЯреБрдХрдбрд╝рд╛ ( рдкрд░рдо , "," , i )
рд╕реЗрдЯ cype = $ select ( $ piece ( col , ":" , 2) '= "" : $ piece ( col , ":" , 2), 1: "% String" )
GetODBCColInfo ^% ourODBC ( ctype ; ColParms ,ред ColODBCTypeName ; ColODBCType ред, MaxLen ред, рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ , рд╕реНрдХреЗрд▓ ) ред
рд╕реЗрдЯ рдирд╛рдо = "p" _ i
рд╕реЗрдЯ qHandle ( "parminfoodbc" ) = qHandle ( "parminfoodbc" ) _ $ рд╕реВрдЪреА ( colodBCType , рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ , рд╕реНрдХреЗрд▓ , 2, рдирд╛рдо , 1)
}
}
рд╕реЗрдЯ рдХреЙрд▓рд┐рдирдлреЛ = рдХреНрдпреВрд╣реИрдВрдбрд▓ ( "рдХреЙрд▓рд┐рдирдлреВрдбрдмреАрд╕реА" )
parminfo = qHandle ( "рдкрд╛рд░реНрдорд┐рдирдлрд╝реЙрд░реНрдмрдХ" ) рд╕реЗрдЯ рдХрд░реЗрдВ
$ $ $ $ рдареАрдХ рд╣реИ
}
}
User.Query рд╡рд░реНрдЧ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
User.Query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ % Query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
User.Query рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред
{
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреНрд╡реЗрд░реА ( p1 As% Integer )
{
}
ClassMethod QueryExecute ( ByRef qHandle % Binary , p1 As% Integer ) рдХреЗ рд░реВрдк рдореЗрдВ% рд╕реНрдерд┐рддрд┐
{
/// рдкреВрд░реА рддреИрдпрд╛рд░реА рдХрд░рдирд╛
, ...
/// рдлреЙрд░реНрдо ROWSPEC
s RowSpec = "ID:% рдкреВрд░реНрдгрд╛рдВрдХ, рджрд┐рдирд╛рдВрдХ:% рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк, рдЬрд╛рдирдХрд╛рд░реА:% рд╕реНрдЯреНрд░рд┐рдВрдЧ"
s qHandle ( "rowspec" ) = RowSpec
/// рдФрдкрдЪрд╛рд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐, рдирд┐рд░рдВрддрд░
s qHandle ( " рдкрд░рдо " ) = "p1:% рдкреВрд░реНрдгрд╛рдВрдХ"
q $ $ $ рдУрдХреЗ
}
ClassMethod QueryClose ( ByRef qHandle рдХреЗ рд░реВрдк рдореЗрдВ% рдмрд╛рдЗрдирд░реА ) % рд╕реНрдерд┐рддрд┐ [ рд╕реНрдерд╛рди рдкрд░ = QueryExute]
{
$ $ $ $ рдареАрдХ рд╣реИ
}
ClassMethod QueryFetch ( ByRef qHandle рдХреЗ рд░реВрдк рдореЗрдВ% рдмрд╛рдЗрдирд░реА , ByRef Row %% рд╕реВрдЪреА , ByRef рдХреЗ рд░реВрдк рдореЗрдВ% Integer = 0 ) % рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рддрд┐ [ рд╕реНрдерд╛рди = рдмрд╛рдж = QueryExecute]
{
/// рдХреНрд▓рд╛рд╕ рдХреНрд╡реЗрд░реАрдЬрд╝ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд░реЗрдЧреБрд▓рд░ QueryFetch рд▓рд┐рдЦреЗрдВ
}
}
/// рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рдЬреЛ User.Query рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:
рдХреНрд▓рд╛рд╕рдореЗрде рдбрд╛рдпрдиреЗрдорд┐рдХрдкреНрд░реЛрдХ ( p1 As% Integer = 0 ) [ ReturnResultsets , SqlProc ]
{
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( % рдкрд░рд┐рдгрд╛рдо ) рд╕реЗрдЯ рдХрд░реЗрдВ ред % рдирдпрд╛ ( "User.DynamicQuery: рдХреНрд╡реЗрд░реА" )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рдирд┐рд╖реНрдкрд╛рджрд┐рдд ( p1 )
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдирдореВрдиреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдХреНрд╡реЗрд░реА рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЗрд╕реЗ рдЕрдореВрд░реНрдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ
рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рд╕рдВрд╕рд╛рдзрди [ рд╕рд╛рд░ ]
{
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд╡реЗрд░реА NoSQL ( ColCount As% Integer )
{
}
ClassMethod NoSQLExecute ( ByRef qHandle % Binary , ColCount As% Integer ) рдХреЗ рд░реВрдк рдореЗрдВ% рд╕реНрдерд┐рддрд┐
{
рд╕реЗрдЯ RowSpec = "Id:% Integer"
ColNum = 1: 1: ColCount рдХреЗ рд▓рд┐рдП
{
рд╕реЗрдЯ RowSpec = RowSpec _ ", p" _ colNum _ ":% Integer"
}
qHandle ( "rowspec" ) = RowSpec рд╕реЗрдЯ рдХрд░реЗрдВ
qHandle ( "params" ) = "ColCount:% Integer" рд╕реЗрдЯ рдХрд░реЗрдВ
рдорд╛рд░ ^ || рдорд╛рдпрдбрд╛рдЯрд╛ (+ ## рдпрд╣ )
рд░реЛрдиреНрдирдо рдХреЗ рд▓рд┐рдП = 1: 1: 100 {
ColNum = 1: 1: ColCount рдХреЗ рд▓рд┐рдП
{
$ рд╕реВрдЪреА рд╕реЗрдЯ рдХрд░реЗрдВ (^ || MyData (+ ## рдпрд╣ , рдкрдВрдХреНрддрд┐рдирд╛рдо ), colNum ) = $ R (1000)
}
}
qHandle ( "colcount" ) = ColCount рд╕реЗрдЯ рдХрд░реЗрдВ
рд╕реЗрдЯ qHandle ( "рдХрд░реНрд╕рд░" ) = $ рдСрд░реНрдбрд░ (^ || MyData (+ ## рдпрд╣ , "" ))
$ $ $ $ рдареАрдХ рд╣реИ
}
ClassMethod NoSQLClose ( ByRef qHandle % рдмрд╛рдЗрдирд░реА ) % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ [ рд╕реНрдерд╛рди = рдмрд╛рдж = NoSQLExecute]
{
рдорд╛рд░ ^ || рдорд╛рдпрдбреЗрдЯрд╛ (+ ## рдпрд╣ ), qHandle
$ $ $ $ рдареАрдХ рд╣реИ
}
ClassMethod NoSQLFetch ( ByRef qHandle рдХреЗ рд░реВрдк рдореЗрдВ% рдмрд╛рдЗрдирд░реА , ByRef Row рдХреЗ рд░реВрдк рдореЗрдВ% рд╕реВрдЪреА , ByRef рдХреЗ рд░реВрдк рдореЗрдВ% Integer = 0 ) % Status [рд╕реНрдерд╛рди рдкрд░ рдмрд╛рдж рдореЗрдВ = NoSQLExecute]
{
рдЕрдЧрд░ qHandle ( "рдХрд░реНрд╕рд░" ) = ""
{
рд╕реЗрдЯ рдкрдВрдХреНрддрд┐ = "" , AtEnd = 1
$ $ $ $ рдареАрдХ рд╣реИ
}
рд╕реЗрдЯ рдкрдВрдХреНрддрд┐рдирд╛рдо = qHandle ( "рдХрд░реНрд╕рд░" )
рд╕реЗрдЯ рдкрдВрдХреНрддрд┐ = $ рд╕реВрдЪреА ( рдкрдВрдХреНрддрд┐рдирд╛рдо ) _ ^ || рдорд╛рдпрдбреЗрдЯрд╛ (+ ## рдпрд╣ , рдкрдВрдХреНрддрд┐рдирд╛рдо )
рд╕реЗрдЯрд╣реИрдВрдбрд▓ ( "рдХрд░реНрд╕рд░" ) = $ рдСрд░реНрдбрд░ (^ || MyData (+ ## рдпрд╣ , рдкрдВрдХреНрддрд┐рдирд╛рдо ))
$ $ $ $ рдареАрдХ рд╣реИ
}
}
рд╣рдорд╛рд░реА рдХреНрд╡реЗрд░реА рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рднрд░реЗ 100 рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рддреА рд╣реИред рдЕрдм рдкреНрд░реЛрд╕реАрдЬрд░ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рд╕-рд╕реНрдЯреЛрд░ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдзрд┐ рд╣реЛрдЧреАред
рдХрдХреНрд╖рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВрд╡рд░реНрдЧ User.Procedures% Persistent рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
{
ClassMethod ProcNoSQL ( p1 As% Integer ) [ ReturnResultsets , SqlName = proc_nosql , SqlProc ]
{
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( % рдкрд░рд┐рдгрд╛рдо ) рд╕реЗрдЯ рдХрд░реЗрдВ ред % рдирдпрд╛ ( "User.Queries: NoSQL" )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рдирд┐рд╖реНрдкрд╛рджрд┐рдд ( p1 )
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
ClassMethod ProcSQL ( p1 As% String = "" ) [ ReturnResultsets , SqlName = proc_sql , SqlProc ]
{
sqltext рд╕реЗрдЯ рдХрд░реЗрдВ "" SELECT ID, Name, DOB, SSN "
sqltext рд╕реЗрдЯ рдХрд░реЗрдВ = sqltext _ "FROM Sample.Person"
sqltext = sqltext _ "WHERE (рдирд╛рдо% STARTSWITH '" _ p1 _ "") "
sqltext = sqltext _ "ORDER BY рдирд╛рдо" рд╕реЗрдЯ рдХрд░реЗрдВ
рдЕрдЧрд░ ' $ isobject ( $ Get ( % sqlcontext )) { рд╕реЗрдЯ % sqlcontext = ## рд╡рд░реНрдЧ ( % ProcedureContext )ред % рдирдпрд╛ () }
рдХреНрд╡реЗрд░реА = ## рд╡рд░реНрдЧ ( % рдкрд░рд┐рдгрд╛рдо ) рд╕реЗрдЯ рдХрд░реЗрдВ ред % рдирдпрд╛ ( "% рдбрд╛рдпрдиреЗрдорд┐рдХрд╡рд┐рдХреНрдпреВ: рдПрд╕рдХреНрдпреВрдПрд▓" )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рддреИрдпрд╛рд░ ( sqltext )
рдкреНрд░рд╢реНрди рдХрд░реЗрдВ ред рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ ()
% sqlcontext рдХрд░реЗрдВ ред AddResultSet ( рдХреНрд╡реЗрд░реА )
}
}
рдЕрдм рдмрдирд╛рдИ рдЧрдИ SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬреЛ NoSQL рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ рдЙрд╕реЗ xDBC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрдиреЗрдорд┐рдХ-рдкрд░рд┐рднрд╛рд╖рд┐рдд SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП NoSQL рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ рд╡рд┐рдзрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рд╣реИ, рд╡рд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ SQL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд░реВрдВрдЧрд╛ред