- Timestamp:
- 12/07/07 10:31:08 (13 months ago)
- Location:
- ext/Muldis-DB
- Files:
-
- 7 modified
-
Changes (modified) (1 diff)
-
lib/Muldis/DB.pm (modified) (1 diff)
-
lib/Muldis/DB/Engine/Example.pm (modified) (13 diffs)
-
lib/Muldis/DB/Interface.pm (modified) (24 diffs)
-
lib/Muldis/DB/SeeAlso.pod (modified) (2 diffs)
-
lib/Muldis/DB/Validator.pm (modified) (5 diffs)
-
t/MDB_50_Validate_Example.t (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ext/Muldis-DB/Changes
r18514 r19095 2 2 --------------------------------------------------------------------------- 3 3 4 2007-1 0-20Darren Duncan <perl@DarrenDuncan.net>5 6 * Muldis DB version 0. 5.0 for Perl 5 is released on CPAN as7 Muldis-DB-0. 5.0.tar.gz. Muldis DB version 0.5.0 for Perl 6 is not4 2007-12-xx Darren Duncan <perl@DarrenDuncan.net> 5 6 * Muldis DB version 0.6.0 for Perl 5 is released on CPAN as 7 Muldis-DB-0.6.0.tar.gz. Muldis DB version 0.6.0 for Perl 6 is not 8 8 released at this time, if ever, since it is currently released only as 9 9 part of the Perl6-Pugs project (in its ext/Muldis-DB/ subdirectory), 10 10 which sets its own less frequent release schedule. The rest of this 11 11 Changes entry refers only to the Perl 5 version. 12 13 * New file versions are: DB.pm and Interface.pm and Validator.pm and 14 Example.pm 0.6.0 and SeeAlso.pm 0.4.2. 15 16 * (Interface.pm, Example.pm, Validator.pm, DB.pm, SeeAlso.pod, 17 MDB_50_Validate_Example.t) Renamed all Perl packages named ::DBMS to 18 ::Machine (that is, under Interface:: and Example::Public::), and 19 similarly renamed all routines, attributes, parameters, variables, 20 config keys, and so on, to use 'machine' rather than 'dbms'. 21 22 * TODO: split all ::Machine pkgs each into itself and ::Process. 23 24 2007-10-20 Darren Duncan <perl@DarrenDuncan.net> 25 26 * Muldis DB version 0.5.0 for Perl 5 is released on CPAN as 27 Muldis-DB-0.5.0.tar.gz. Muldis DB version 0.5.0 for Perl 6 is not 28 released at all. The rest of this Changes entry refers only to the 29 Perl 5 version. 12 30 13 31 * Removed the files PhysType.pm and Operators.pm; these files were very -
ext/Muldis-DB/lib/Muldis/DB.pm
r18514 r19095 108 108 Perl code runs). 109 109 110 A Muldis::DB::Interface::DBMS object represents a single active Muldis DB 111 virtual machine; it has a spartan DBI-inspired set of methods which you use 112 to compile/prepare and/or invoke/execute Muldis D statements and routines 113 within the virtual machine, input data to it, and output data from it. 114 115 You can create more than one DBMS object at a time, and they are 110 A Muldis::DB::Interface::Machine object represents a single active Muldis 111 DB virtual machine; it has a spartan DBI-inspired set of methods which you 112 use to compile/prepare and/or invoke/execute Muldis D statements and 113 routines within the virtual machine, input data to it, and output data from 114 it. 115 116 You can create more than one Machine object at a time, and they are 116 117 essentially all isolated from each other, even if more than one uses the 117 same Engine class to implement it; that is, multiple DBMS objects will not 118 have references to each other at a level visible in the Muldis DB Native 119 Interface, if at all. To account for situations where multiple DBMS 120 objects want to use the same external resources, such as a repository file 121 on disk, it is expected that the Engines will employ appropriate measures 122 such as system-managed locks so that resource corruption or application 123 failure is prevented. I<Also, Muldis DB should be thread safe and/or 124 savvy in the future, but for now it officially is not and you should not 125 share Muldis DB objects between multiple threads, nor have objects in 126 separate threads try to access the same external resources.> 118 same Engine class to implement it; that is, multiple Machine objects will 119 not have references to each other at a level visible in the Muldis DB 120 Native Interface, if at all. To account for situations where multiple 121 Machine objects want to use the same external resources, such as a 122 repository file on disk, it is expected that the Engines will employ 123 appropriate measures such as system-managed locks so that resource 124 corruption or application failure is prevented. I<Also, Muldis DB should 125 be thread safe and/or savvy in the future, but for now it officially is not 126 and you should not share Muldis DB objects between multiple threads, nor 127 have objects in separate threads try to access the same external 128 resources.> 127 129 128 130 Muldis DB does not use any dialect of SQL in its native API (unlike many -
ext/Muldis-DB/lib/Muldis/DB/Engine/Example.pm
r18514 r19095 11 11 ########################################################################### 12 12 13 sub new_ dbms of Muldis::DB::Engine::Example::Public::DBMS14 (Array :$exp_ast_lang!, Any :$ dbms_config!) {15 return ::Muldis::DB::Engine::Example::Public:: DBMS.new(16 :exp_ast_lang($exp_ast_lang), : dbms_config($dbms_config) );13 sub new_machine of Muldis::DB::Engine::Example::Public::Machine 14 (Array :$exp_ast_lang!, Any :$machine_config!) { 15 return ::Muldis::DB::Engine::Example::Public::Machine.new( 16 :exp_ast_lang($exp_ast_lang), :machine_config($machine_config) ); 17 17 } 18 18 … … 24 24 ########################################################################### 25 25 26 class Muldis::DB::Engine::Example::Public:: DBMS{27 does Muldis::DB::Interface:: DBMS;28 29 # Allow objects of these to update DBMS' "assoc" list re themselves.26 class Muldis::DB::Engine::Example::Public::Machine { 27 does Muldis::DB::Interface::Machine; 28 29 # Allow objects of these to update Machine' "assoc" list re themselves. 30 30 trusts Muldis::DB::Engine::Example::Public::Var; 31 31 trusts Muldis::DB::Engine::Example::Public::FuncBinding; 32 32 trusts Muldis::DB::Engine::Example::Public::ProcBinding; 33 33 34 # User-supplied config data for this DBMS object / virtual machine.34 # User-supplied config data for this Machine object. 35 35 # For the moment, the Example Engine doesn't actually have anything 36 # that can be config ured in this way, so input $dbms_config is ignored.36 # that can be config in this way, so input $machine_config is ignored. 37 37 has Any $!exp_ast_lang; 38 has Any $! dbms_config;39 40 # Lists of user-held objects associated with parts of this DBMS.38 has Any $!machine_config; 39 40 # Lists of user-held objects associated with parts of this Machine. 41 41 # For each of these, Hash keys are obj .WHERE/addrs, vals the objs. 42 42 # These should be weak obj-refs, so objs disappear from here … … 51 51 ########################################################################### 52 52 53 submethod BUILD (Array :$exp_ast_lang!, Any :$ dbms_config!) {53 submethod BUILD (Array :$exp_ast_lang!, Any :$machine_config!) { 54 54 55 55 # TODO: input checks. 56 $!exp_ast_lang = [$exp_ast_lang.values];57 $! dbms_config = $dbms_config;56 $!exp_ast_lang = [$exp_ast_lang.values]; 57 $!machine_config = $machine_config; 58 58 59 59 $!assoc_vars = {}; … … 89 89 (Str :$decl_type!) { 90 90 return ::Muldis::DB::Engine::Example::Public::Var.new( 91 : dbms(self), :decl_type($decl_type) );91 :machine(self), :decl_type($decl_type) ); 92 92 } 93 93 … … 99 99 () { 100 100 return ::Muldis::DB::Engine::Example::Public::FuncBinding.new( 101 : dbms(self) );101 :machine(self) ); 102 102 } 103 103 … … 109 109 () { 110 110 return ::Muldis::DB::Engine::Example::Public::ProcBinding.new( 111 : dbms(self) );111 :machine(self) ); 112 112 } 113 113 … … 122 122 123 123 # my $f = ::Muldis::DB::Engine::Example::Public::FuncBinding.new( 124 # : dbms(self) );124 # :machine(self) ); 125 125 126 126 my $result = ::Muldis::DB::Engine::Example::Public::Var.new( 127 : dbms(self), :decl_type('sys.Core.Universal.Universal') );127 :machine(self), :decl_type('sys.Core.Universal.Universal') ); 128 128 129 129 # $f.bind_func( :func_name($func_name) ); … … 141 141 142 142 # my $p = ::Muldis::DB::Engine::Example::Public::ProcBinding.new( 143 # : dbms(self) );143 # :machine(self) ); 144 144 145 145 # $p.bind_proc( :proc_name($proc_name) ); … … 184 184 ########################################################################### 185 185 186 } # class Muldis::DB::Engine::Example::Public:: DBMS186 } # class Muldis::DB::Engine::Example::Public::Machine 187 187 188 188 ########################################################################### … … 192 192 does Muldis::DB::Interface::Var; 193 193 194 has Muldis::DB::Engine::Example::Public:: DBMS $!dbms;194 has Muldis::DB::Engine::Example::Public::Machine $!machine; 195 195 196 196 has Muldis::DB::Engine::Example::VM::Var $!var; … … 199 199 ########################################################################### 200 200 201 submethod BUILD (Muldis::DB::Engine::Example::Public:: DBMS :$dbms!,201 submethod BUILD (Muldis::DB::Engine::Example::Public::Machine :$machine!, 202 202 Str :$decl_type!) { 203 203 204 204 # TODO: input checks. 205 205 206 $! dbms = $dbms;207 # $ dbms!assoc_vars.{self.WHERE} = self;208 # weaken $ dbms!assoc_vars.{self.WHERE};206 $!machine = $machine; 207 # $machine!assoc_vars.{self.WHERE} = self; 208 # weaken $machine!assoc_vars.{self.WHERE}; 209 209 210 210 # $!var = ::Muldis::DB::Engine::Example::VM::Var.new( … … 215 215 216 216 submethod DESTROY () { 217 # $! dbms!assoc_vars.delete( self.WHERE );217 # $!machine!assoc_vars.delete( self.WHERE ); 218 218 return; 219 219 } … … 281 281 282 282 It also describes the same-number versions for Perl 6 of 283 Muldis::DB::Engine::Example::Public:: DBMS,283 Muldis::DB::Engine::Example::Public::Machine, 284 284 Muldis::DB::Engine::Example::Public::Var, 285 285 Muldis::DB::Engine::Example::Public::FuncBinding, and -
ext/Muldis-DB/lib/Muldis/DB/Interface.pm
r18514 r19095 9 9 ########################################################################### 10 10 11 sub new_ dbms of Muldis::DB::Interface::DBMS12 (Str :$engine_name!, Array :$exp_ast_lang!, Any :$dbms_config!) {13 14 die q{new_ dbms(): Bad :$engine_name arg; it is not an object of a}11 sub new_machine of Muldis::DB::Interface::Machine (Str :$engine_name!, 12 Array :$exp_ast_lang!, Any :$machine_config!) { 13 14 die q{new_machine(): Bad :$engine_name arg; it is not an object of a} 15 15 ~ q{ Str-doing class, or it is the empty string.} 16 16 if !$engine_name.defined or !$engine_name.does(Str) … … 24 24 eval "require $engine_name;"; 25 25 if (my $err = $!) { 26 die q{new_ dbms(): Could not load Muldis DB Engine module}27 ~ qq{ '$engine_name': $err};26 die q{new_machine(): Could not load Muldis DB Engine} 27 ~ qq{ module '$engine_name': $err}; 28 28 } 29 # die qq{new_ dbms(): Could not load Muldis DB Engine module}29 # die qq{new_machine(): Could not load Muldis DB Engine module} 30 30 # ~ qq{ '$engine_name': while that file did compile without} 31 31 # ~ q{ errors, it did not declare the same-named module.} 32 32 # if !::($engine_name).does(Module); 33 33 } 34 # die qq{new_ dbms(): The Muldis DB Engine module '$engine_name' does}35 # ~ q{ not provide the new_dbms() constructor function.}36 # if !::($engine_name).HOW.can('new_ dbms');37 my $ dbms= undef;34 # die qq{new_machine(): The Muldis DB Engine module '$engine_name'} 35 # ~ q{ does not provide the new_machine() constructor function.} 36 # if !::($engine_name).HOW.can('new_machine'); 37 my $machine = undef; 38 38 try { 39 $dbms = &::($engine_name)::new_dbms( 40 :exp_ast_lang($exp_ast_lang), :dbms_config($dbms_config) ); 39 $machine = &::($engine_name)::new_machine( 40 :exp_ast_lang($exp_ast_lang), 41 :machine_config($machine_config) ); 41 42 }; 42 43 if (my $err = $!) { 43 die qq{new_ dbms(): The Muldis DB Engine module'$engine_name'}44 ~ qq{ threw an exception during its new_ dbms() exec: $err};45 } 46 die q{new_ dbms(): The new_dbms() constructor function of the}44 die qq{new_machine(): The Muldis DB Engine modu '$engine_name'} 45 ~ qq{ threw an exception during its new_machine() exec: $err}; 46 } 47 die q{new_machine(): The new_machine() constructor function of the} 47 48 ~ qq{ Muldis DB Engine module '$engine_name' did not return an} 48 ~ q{ object of a Muldis::DB::Interface::DBMS-doing class.} 49 if !$dbms.defined or !$dbms.does(::Muldis::DB::Interface::DBMS); 50 51 return $dbms; 49 ~ q{ object of a Muldis::DB::Interface::Machine-doing class.} 50 if !$machine.defined 51 or !$machine.does(::Muldis::DB::Interface::Machine); 52 53 return $machine; 52 54 } 53 55 … … 59 61 ########################################################################### 60 62 61 role Muldis::DB::Interface:: DBMS{63 role Muldis::DB::Interface::Machine { 62 64 63 65 method fetch_exp_ast_lang { … … 117 119 } 118 120 119 } # role Muldis::DB::Interface:: DBMS121 } # role Muldis::DB::Interface::Machine 120 122 121 123 ########################################################################### … … 124 126 role Muldis::DB::Interface::Var { 125 127 126 method assoc_ dbms{128 method assoc_machine { 127 129 die q{not implemented by subclass } ~ self.WHAT; 128 130 } … … 147 149 role Muldis::DB::Interface::FuncBinding { 148 150 149 method assoc_ dbms{151 method assoc_machine { 150 152 die q{not implemented by subclass } ~ self.WHAT; 151 153 } … … 186 188 role Muldis::DB::Interface::ProcBinding { 187 189 188 method assoc_ dbms{190 method assoc_machine { 189 191 die q{not implemented by subclass } ~ self.WHAT; 190 192 } … … 237 239 238 240 It also describes the same-number versions for Perl 6 of 239 Muldis::DB::Interface:: DBMS ("DBMS"), Muldis::DB::Interface::Var ("Var"),240 Muldis::DB::Interface::FuncBinding ("FuncBinding"), and241 Muldis::DB::Interface::Machine ("Machine"), Muldis::DB::Interface::Var 242 ("Var"), Muldis::DB::Interface::FuncBinding ("FuncBinding"), and 241 243 Muldis::DB::Interface::ProcBinding ("ProcBinding"). 242 244 … … 249 251 use Muldis::DB::Interface; 250 252 251 my $ dbms = Muldis::DB::Interface::new_dbms(253 my $machine = Muldis::DB::Interface::new_machine( 252 254 :engine_name('Muldis::DB::Engine::Example'), 253 255 :exp_ast_lang([ 'MuldisD', 'cpan:DUNCAND', '0.8.1' ]), 254 : dbms_config({}),256 :machine_config({}), 255 257 ); 256 258 257 my $r1 = $ dbms.new_var( :decl_type('sys.Core.Relation.Relation') );258 my $r2 = $ dbms.new_var( :decl_type('sys.Core.Relation.Relation') );259 my $r1 = $machine.new_var( :decl_type('sys.Core.Relation.Relation') ); 260 my $r2 = $machine.new_var( :decl_type('sys.Core.Relation.Relation') ); 259 261 260 262 $r1.store_ast( :ast([ 'Relation', 'sys.Core.Relation.Relation', [ … … 284 286 ] ]) ); 285 287 286 my $r3 = $ dbms.call_func(288 my $r3 = $machine.call_func( 287 289 :func_name('sys.Core.Relation.join'), 288 290 :args({ … … 337 339 names, you don't need to change your code when the package names change due 338 340 to switching the Engine. You only refer to some Engine's root package name 339 once, as a C<Muldis::DB::Interface::new_ dbms> argument, and even that can340 be read from a config file rather than being hard-coded in your341 once, as a C<Muldis::DB::Interface::new_machine> argument, and even that 342 can be read from a config file rather than being hard-coded in your 341 343 application. 342 344 … … 355 357 =over 356 358 357 =item C<new_ dbms of Muldis::DB::Interface::DBMS (Str :$engine_name!, Array358 :$exp_ast_lang!, Any :$dbms_config!)>359 360 This constructor function creates and returns a C< DBMS> object that is359 =item C<new_machine of Muldis::DB::Interface::Machine (Str :$engine_name!, 360 Array :$exp_ast_lang!, Any :$machine_config!)> 361 362 This constructor function creates and returns a C<Machine> object that is 361 363 implemented by the Muldis DB Engine named by its named argument 362 C<$engine_name>; that object is initialized using the C<$ dbms_config>364 C<$engine_name>; that object is initialized using the C<$machine_config> 363 365 argument. The named argument C<$engine_name> is the name of a Perl module 364 366 that is expected to be the root package of a Muldis DB Engine, and which is 365 expected to declare a C<new_dbms> subroutine with a single named argument 366 C<$dbms_config>; invoking this subroutine is expected to return an object 367 of some class of the same Engine which does the Muldis::DB::Interface::DBMS 368 role. This function will start by testing if the root package is already 369 loaded (it may be declared by some already-loaded file of another name), 370 and only if not, will it do a Perl 'require' of the C<$engine_name>. The 371 new C<DBMS> object's "expected AST language" attribute is initialized from 372 the C<$exp_ast_lang> argument, which is a 3-element Array as described for 373 the argument of the C<DBMS> method C<store_exp_ast_lang> (if applicable, 374 the C<$dbms_config> argument is interpreted in light of C<$exp_ast_lang>). 367 expected to declare a C<new_machine> subroutine with a single named 368 argument C<$machine_config>; invoking this subroutine is expected to return 369 an object of some class of the same Engine which does the 370 Muldis::DB::Interface::Machine role. This function will start by testing 371 if the root package is already loaded (it may be declared by some 372 already-loaded file of another name), and only if not, will it do a Perl 373 'require' of the C<$engine_name>. The new C<Machine> object's "expected 374 AST language" attribute is initialized from the C<$exp_ast_lang> argument, 375 which is a 3-element Array as described for the argument of the C<Machine> 376 method C<store_exp_ast_lang> (if applicable, the C<$machine_config> 377 argument is interpreted in light of C<$exp_ast_lang>). 375 378 376 379 =back 377 380 378 =head2 The Muldis::DB::Interface:: DBMSRole379 380 A C< DBMS> object represents a single active Muldis DB virtual machine /381 =head2 The Muldis::DB::Interface::Machine Role 382 383 A C<Machine> object represents a single active Muldis DB virtual machine / 381 384 Muldis D environment, which is the widest scope stateful context in which 382 385 any other database activities happen. Other activities meaning the 383 386 compilation and execution of Muldis D code, mounting or unmounting depots, 384 387 performing queries, data manipulation, data definition, and transactions. 385 If a C< DBMS> object is ever garbage collected by Perl while it has any388 If a C<Machine> object is ever garbage collected by Perl while it has any 386 389 active transactions, then those will all be rolled back, and then an 387 390 exception thrown. … … 392 395 393 396 This method returns, as a 3-element (ordered) Array, the long name of the 394 Muldis D (or alternative) language version that its invocant C< DBMS> object395 and its associated/child objects expect their AST/code/value input to 396 conform to, and that their AST/code/value output will conform to. The 3397 Muldis D (or alternative) language version that its invocant C<Machine> 398 object and its associated/child objects expect their AST/code/value input 399 to conform to, and that their AST/code/value output will conform to. The 3 397 400 elements of the array (each a Str) are, in order, the language spec base 398 401 name (typically C<MuldisD>), the language spec authority (typically … … 403 406 404 407 This method assigns a new expected language long name to its invocant 405 C< DBMS>, which is supplied in the C<$lang> argument; the argument is408 C<Machine>, which is supplied in the C<$lang> argument; the argument is 406 409 expected to be a 3-element Array as described for C<fetch_exp_ast_lang>. 407 410 This method dies if the specified language/version isn't one that the … … 411 414 412 415 This method creates and returns a new C<Var> object that is associated with 413 the invocant C< DBMS>, and whose declared Muldis D type is named by the416 the invocant C<Machine>, and whose declared Muldis D type is named by the 414 417 C<$decl_type> argument, and whose default Muldis D value is the default 415 418 value of its declared type. … … 419 422 This method returns, as elements of a new (unordered) Array, all the 420 423 currently existing C<Var> objects that are associated with the invocant 421 C< DBMS>.424 C<Machine>. 422 425 423 426 =item C<new_func_binding of Muldis::DB::Interface::FuncBinding ()> 424 427 425 428 This method creates and returns a new C<FuncBinding> object that is 426 associated with the invocant C< DBMS>.429 associated with the invocant C<Machine>. 427 430 428 431 =item C<assoc_func_bindings of Array ()> … … 430 433 This method returns, as elements of a new (unordered) Array, all the 431 434 currently existing C<FuncBinding> objects that are associated with the 432 invocant C< DBMS>.435 invocant C<Machine>. 433 436 434 437 =item C<new_proc_binding of Muldis::DB::Interface::ProcBinding ()> 435 438 436 439 This method creates and returns a new C<ProcBinding> object that is 437 associated with the invocant C< DBMS>.440 associated with the invocant C<Machine>. 438 441 439 442 =item C<assoc_proc_bindings of Array ()> … … 441 444 This method returns, as elements of a new (unordered) Array, all the 442 445 currently existing C<ProcBinding> objects that are associated with the 443 invocant C< DBMS>.446 invocant C<Machine>. 444 447 445 448 =item C<call_func of Muldis::DB::Interface::Var (Str :$func_name!, Hash … … 465 468 This method returns the current transaction nesting level of its invocant's 466 469 virtual machine. If no explicit transactions were started, then the 467 nesting level is zero, in which case the DBMSis conceptually470 nesting level is zero, in which case the Machine is conceptually 468 471 auto-committing every successful Muldis D statement. Each call of 469 472 C<start_trans> will increase the nesting level by one, and each … … 497 500 A C<Var> object is a Muldis D variable that is lexically scoped to the Perl 498 501 environment (like an ordinary Perl variable). It is associated with a 499 specific C< DBMS> object, the one whose C<new_var> method created it, but it500 i s considered anonymous and non-invokable within the virtual machine. The501 only way for Muldis D code to work with these variables is if they bound to 502 Perl invocations of Muldis D routines being C<call(|\w+)> by Perl; a Muldis 503 D routine parameter one is bound to is the name it is referenced by in the 504 virtual machine. C<Var> objects are the normal way to directly share or 505 move data between the Muldis D and Perl environments. A C<Var> is strongly 506 typed, and the declared Muldis D type of the variable (which affects what 507 values it is allowed to hold) is set when the C<Var> object is created, and 508 this declared type can't be changed afterwards.502 specific C<Machine> object, the one whose C<new_var> method created it, but 503 it is considered anonymous and non-invokable within the virtual machine. 504 The only way for Muldis D code to work with these variables is if they 505 bound to Perl invocations of Muldis D routines being C<call(|\w+)> by Perl; 506 a Muldis D routine parameter one is bound to is the name it is referenced 507 by in the virtual machine. C<Var> objects are the normal way to directly 508 share or move data between the Muldis D and Perl environments. A C<Var> is 509 strongly typed, and the declared Muldis D type of the variable (which 510 affects what values it is allowed to hold) is set when the C<Var> object is 511 created, and this declared type can't be changed afterwards. 509 512 510 513 =over 511 514 512 =item C<assoc_ dbms of Muldis::DB::Interface::DBMS()>513 514 This method returns the C< DBMS> object that the invocant C<Var> is515 =item C<assoc_machine of Muldis::DB::Interface::Machine ()> 516 517 This method returns the C<Machine> object that the invocant C<Var> is 515 518 associated with. 516 519 … … 537 540 538 541 A C<FuncBinding> represents a single Muldis D function that may be directly 539 invoked by Perl code. It is associated with a specific C< DBMS> object, the540 one whose C<new_func_binding> method created it, and the function it542 invoked by Perl code. It is associated with a specific C<Machine> object, 543 the one whose C<new_func_binding> method created it, and the function it 541 544 represents lives in and has a global-public scoped name in the 542 545 corresponding virtual machine. This is specifically a lazy binding, so no … … 544 547 C<call> method is being executed, and a then-valid object can then become 545 548 invalid afterwards. A C<FuncBinding> is conceptually used behind the 546 scenes to implement a C< DBMS> object's C<call_func> method, but you can use547 it directly instead, for possibly better performance.549 scenes to implement a C<Machine> object's C<call_func> method, but you can 550 use it directly instead, for possibly better performance. 548 551 549 552 =over 550 553 551 =item C<assoc_ dbms of Muldis::DB::Interface::DBMS()>552 553 This method returns the C< DBMS> object that the invocant C<FuncBinding> is554 associated with.554 =item C<assoc_machine of Muldis::DB::Interface::Machine ()> 555 556 This method returns the C<Machine> object that the invocant C<FuncBinding> 557 is associated with. 555 558 556 559 =item C<bind_func (Str :$func_name!)> … … 604 607 605 608 A C<ProcBinding> represents a single Muldis D procedure that may be 606 directly invoked by Perl code. It is associated with a specific C< DBMS>609 directly invoked by Perl code. It is associated with a specific C<Machine> 607 610 object, the one whose C<new_proc_binding> method created it, and the 608 611 procedure it represents lives in and has a global-public scoped name in the … … 611 614 C<call> method is being executed, and a then-valid object can then become 612 615 invalid afterwards. A C<ProcBinding> is conceptually used behind the 613 scenes to implement a C< DBMS> object's C<call_proc> method, but you can use614 it directly instead, for possibly better performance.616 scenes to implement a C<Machine> object's C<call_proc> method, but you can 617 use it directly instead, for possibly better performance. 615 618 616 619 =over 617 620 618 =item C<assoc_ dbms of Muldis::DB::Interface::DBMS()>619 620 This method returns the C< DBMS> object that the invocant C<ProcBinding> is621 associated with.621 =item C<assoc_machine of Muldis::DB::Interface::Machine ()> 622 623 This method returns the C<Machine> object that the invocant C<ProcBinding> 624 is associated with. 622 625 623 626 =item C<bind_proc (Str :$proc_name!)> -
ext/Muldis-DB/lib/Muldis/DB/SeeAlso.pod
r18514 r19095 60 60 61 61 A Muldis DB Engine built around Jeffrey Cohen's L<Genezzo> DBMS, or 62 specifically the root module that provides the C<new_ dbms> function, could63 co nceivably have either of the above file or package names, depending on64 what its author prefers, or something else yet. A strong name influence62 specifically the root module that provides the C<new_machine> function, 63 could conceivably have either of the above file or package names, depending 64 on what its author prefers, or something else yet. A strong name influence 65 65 could be whether Muldis DB forms the sole public interface for Genezzo 66 66 after its conversion to use it, or whether Genezzo would retain alternate
