1-- This file is covered by the Internet Software Consortium (ISC) License 2-- Reference: ../../License.txt 3 4with CommonText; 5with AdaBase.Connection.Base; 6with AdaBase.Interfaces.Statement; 7with AdaBase.Logger.Facility; 8with AdaBase.Results.Sets; 9with AdaBase.Results.Field; 10with AdaBase.Results.Converters; 11with AdaBase.Results.Generic_Converters; 12with Ada.Calendar.Formatting; 13with Ada.Characters.Handling; 14with Ada.Containers.Indefinite_Hashed_Maps; 15with Ada.Containers.Vectors; 16with Ada.Strings.Hash; 17with Ada.Strings.Wide_Unbounded; 18with Ada.Strings.Wide_Wide_Unbounded; 19with Ada.Characters.Conversions; 20with Ada.Unchecked_Deallocation; 21with Spatial_Data.Well_Known_Binary; 22 23package AdaBase.Statement.Base is 24 25 package CT renames CommonText; 26 package SUW renames Ada.Strings.Wide_Unbounded; 27 package SWW renames Ada.Strings.Wide_Wide_Unbounded; 28 package CAL renames Ada.Calendar; 29 package CFM renames Ada.Calendar.Formatting; 30 package ACC renames Ada.Characters.Conversions; 31 package AR renames AdaBase.Results; 32 package ACB renames AdaBase.Connection.Base; 33 package AIS renames AdaBase.Interfaces.Statement; 34 package ALF renames AdaBase.Logger.Facility; 35 package ARC renames AdaBase.Results.Converters; 36 package RGC renames AdaBase.Results.Generic_Converters; 37 package ARF renames AdaBase.Results.Field; 38 package ARS renames AdaBase.Results.Sets; 39 package ACH renames Ada.Characters.Handling; 40 package GEO renames Spatial_Data; 41 package WKB renames Spatial_Data.Well_Known_Binary; 42 43 44 type SQL_Access is access all String; 45 46 type Base_Statement is 47 abstract new Base_Pure and AIS.iStatement with private; 48 type Basic_Statement is access all Base_Statement'Class; 49 50 type Stmt_Type is (direct_statement, prepared_statement); 51 52 ILLEGAL_BIND_SQL : exception; 53 INVALID_FOR_DIRECT_QUERY : exception; 54 INVALID_FOR_RESULT_SET : exception; 55 INVALID_COLUMN_INDEX : exception; 56 PRIOR_EXECUTION_FAILED : exception; 57 BINDING_COLUMN_NOT_FOUND : exception; 58 BINDING_TYPE_MISMATCH : exception; 59 BINDING_SIZE_MISMATCH : exception; 60 STMT_PREPARATION : exception; 61 STMT_EXECUTION : exception; 62 MARKER_NOT_FOUND : exception; 63 64 overriding 65 function rows_affected (Stmt : Base_Statement) return Affected_Rows; 66 67 overriding 68 function successful (Stmt : Base_Statement) return Boolean; 69 70 overriding 71 function data_discarded (Stmt : Base_Statement) return Boolean; 72 73 overriding 74 procedure iterate (Stmt : out Base_Statement; 75 process : not null access procedure); 76 77 overriding 78 procedure iterate (Stmt : out Base_Statement; 79 process : not null access procedure (row : ARS.Datarow)); 80 81 82 ------------------------------------------- 83 -- 23 bind using integer index -- 84 ------------------------------------------- 85 procedure bind (Stmt : out Base_Statement; 86 index : Positive; 87 vaxx : AR.NByte0_Access); 88 89 procedure bind (Stmt : out Base_Statement; 90 index : Positive; 91 vaxx : AR.NByte1_Access); 92 93 procedure bind (Stmt : out Base_Statement; 94 index : Positive; 95 vaxx : AR.NByte2_Access); 96 97 procedure bind (Stmt : out Base_Statement; 98 index : Positive; 99 vaxx : AR.NByte3_Access); 100 101 procedure bind (Stmt : out Base_Statement; 102 index : Positive; 103 vaxx : AR.NByte4_Access); 104 105 procedure bind (Stmt : out Base_Statement; 106 index : Positive; 107 vaxx : AR.NByte8_Access); 108 109 procedure bind (Stmt : out Base_Statement; 110 index : Positive; 111 vaxx : AR.Byte1_Access); 112 113 procedure bind (Stmt : out Base_Statement; 114 index : Positive; 115 vaxx : AR.Byte2_Access); 116 117 procedure bind (Stmt : out Base_Statement; 118 index : Positive; 119 vaxx : AR.Byte3_Access); 120 121 procedure bind (Stmt : out Base_Statement; 122 index : Positive; 123 vaxx : AR.Byte4_Access); 124 125 procedure bind (Stmt : out Base_Statement; 126 index : Positive; 127 vaxx : AR.Byte8_Access); 128 129 procedure bind (Stmt : out Base_Statement; 130 index : Positive; 131 vaxx : AR.Real9_Access); 132 133 procedure bind (Stmt : out Base_Statement; 134 index : Positive; 135 vaxx : AR.Real18_Access); 136 137 procedure bind (Stmt : out Base_Statement; 138 index : Positive; 139 vaxx : AR.Str1_Access); 140 141 procedure bind (Stmt : out Base_Statement; 142 index : Positive; 143 vaxx : AR.Str2_Access); 144 145 procedure bind (Stmt : out Base_Statement; 146 index : Positive; 147 vaxx : AR.Str4_Access); 148 149 procedure bind (Stmt : out Base_Statement; 150 index : Positive; 151 vaxx : AR.Time_Access); 152 153 procedure bind (Stmt : out Base_Statement; 154 index : Positive; 155 vaxx : AR.Chain_Access); 156 157 procedure bind (Stmt : out Base_Statement; 158 index : Positive; 159 vaxx : AR.Enum_Access); 160 161 procedure bind (Stmt : out Base_Statement; 162 index : Positive; 163 vaxx : AR.Settype_Access); 164 165 procedure bind (Stmt : out Base_Statement; 166 index : Positive; 167 vaxx : AR.Bits_Access); 168 169 procedure bind (Stmt : out Base_Statement; 170 index : Positive; 171 vaxx : AR.S_UTF8_Access); 172 173 procedure bind (Stmt : out Base_Statement; 174 index : Positive; 175 vaxx : AR.Geometry_Access); 176 177 178 ------------------------------------------- 179 -- 23 bind using header for index -- 180 ------------------------------------------- 181 procedure bind (Stmt : out Base_Statement; 182 heading : String; 183 vaxx : AR.NByte0_Access); 184 185 procedure bind (Stmt : out Base_Statement; 186 heading : String; 187 vaxx : AR.NByte1_Access); 188 189 procedure bind (Stmt : out Base_Statement; 190 heading : String; 191 vaxx : AR.NByte2_Access); 192 193 procedure bind (Stmt : out Base_Statement; 194 heading : String; 195 vaxx : AR.NByte3_Access); 196 197 procedure bind (Stmt : out Base_Statement; 198 heading : String; 199 vaxx : AR.NByte4_Access); 200 201 procedure bind (Stmt : out Base_Statement; 202 heading : String; 203 vaxx : AR.NByte8_Access); 204 205 procedure bind (Stmt : out Base_Statement; 206 heading : String; 207 vaxx : AR.Byte1_Access); 208 209 procedure bind (Stmt : out Base_Statement; 210 heading : String; 211 vaxx : AR.Byte2_Access); 212 213 procedure bind (Stmt : out Base_Statement; 214 heading : String; 215 vaxx : AR.Byte3_Access); 216 217 procedure bind (Stmt : out Base_Statement; 218 heading : String; 219 vaxx : AR.Byte4_Access); 220 221 procedure bind (Stmt : out Base_Statement; 222 heading : String; 223 vaxx : AR.Byte8_Access); 224 225 procedure bind (Stmt : out Base_Statement; 226 heading : String; 227 vaxx : AR.Real9_Access); 228 229 procedure bind (Stmt : out Base_Statement; 230 heading : String; 231 vaxx : AR.Real18_Access); 232 233 procedure bind (Stmt : out Base_Statement; 234 heading : String; 235 vaxx : AR.Str1_Access); 236 237 procedure bind (Stmt : out Base_Statement; 238 heading : String; 239 vaxx : AR.Str2_Access); 240 241 procedure bind (Stmt : out Base_Statement; 242 heading : String; 243 vaxx : AR.Str4_Access); 244 245 procedure bind (Stmt : out Base_Statement; 246 heading : String; 247 vaxx : AR.Time_Access); 248 249 procedure bind (Stmt : out Base_Statement; 250 heading : String; 251 vaxx : AR.Chain_Access); 252 253 procedure bind (Stmt : out Base_Statement; 254 heading : String; 255 vaxx : AR.Enum_Access); 256 257 procedure bind (Stmt : out Base_Statement; 258 heading : String; 259 vaxx : AR.Settype_Access); 260 261 procedure bind (Stmt : out Base_Statement; 262 heading : String; 263 vaxx : AR.Bits_Access); 264 265 procedure bind (Stmt : out Base_Statement; 266 heading : String; 267 vaxx : AR.S_UTF8_Access); 268 269 procedure bind (Stmt : out Base_Statement; 270 heading : String; 271 vaxx : AR.Geometry_Access); 272 273 274 -------------------------------------------- 275 -- 23 assign/access using integer index -- 276 -------------------------------------------- 277 procedure assign (Stmt : out Base_Statement; 278 index : Positive; 279 vaxx : AR.NByte0_Access); 280 281 procedure assign (Stmt : out Base_Statement; 282 index : Positive; 283 vaxx : AR.NByte1_Access); 284 285 procedure assign (Stmt : out Base_Statement; 286 index : Positive; 287 vaxx : AR.NByte2_Access); 288 289 procedure assign (Stmt : out Base_Statement; 290 index : Positive; 291 vaxx : AR.NByte3_Access); 292 293 procedure assign (Stmt : out Base_Statement; 294 index : Positive; 295 vaxx : AR.NByte4_Access); 296 297 procedure assign (Stmt : out Base_Statement; 298 index : Positive; 299 vaxx : AR.NByte8_Access); 300 301 procedure assign (Stmt : out Base_Statement; 302 index : Positive; 303 vaxx : AR.Byte1_Access); 304 305 procedure assign (Stmt : out Base_Statement; 306 index : Positive; 307 vaxx : AR.Byte2_Access); 308 309 procedure assign (Stmt : out Base_Statement; 310 index : Positive; 311 vaxx : AR.Byte3_Access); 312 313 procedure assign (Stmt : out Base_Statement; 314 index : Positive; 315 vaxx : AR.Byte4_Access); 316 317 procedure assign (Stmt : out Base_Statement; 318 index : Positive; 319 vaxx : AR.Byte8_Access); 320 321 procedure assign (Stmt : out Base_Statement; 322 index : Positive; 323 vaxx : AR.Real9_Access); 324 325 procedure assign (Stmt : out Base_Statement; 326 index : Positive; 327 vaxx : AR.Real18_Access); 328 329 procedure assign (Stmt : out Base_Statement; 330 index : Positive; 331 vaxx : AR.Str1_Access); 332 333 procedure assign (Stmt : out Base_Statement; 334 index : Positive; 335 vaxx : AR.Str2_Access); 336 337 procedure assign (Stmt : out Base_Statement; 338 index : Positive; 339 vaxx : AR.Str4_Access); 340 341 procedure assign (Stmt : out Base_Statement; 342 index : Positive; 343 vaxx : AR.Time_Access); 344 345 procedure assign (Stmt : out Base_Statement; 346 index : Positive; 347 vaxx : AR.Chain_Access); 348 349 procedure assign (Stmt : out Base_Statement; 350 index : Positive; 351 vaxx : AR.Enum_Access); 352 353 procedure assign (Stmt : out Base_Statement; 354 index : Positive; 355 vaxx : AR.Settype_Access); 356 357 procedure assign (Stmt : out Base_Statement; 358 index : Positive; 359 vaxx : AR.Bits_Access); 360 361 procedure assign (Stmt : out Base_Statement; 362 index : Positive; 363 vaxx : AR.S_UTF8_Access); 364 365 procedure assign (Stmt : out Base_Statement; 366 index : Positive; 367 vaxx : AR.Geometry_Access); 368 369 370 ------------------------------------------------ 371 -- 23 assign/access using moniker for index -- 372 ------------------------------------------------ 373 procedure assign (Stmt : out Base_Statement; 374 moniker : String; 375 vaxx : AR.NByte0_Access); 376 377 procedure assign (Stmt : out Base_Statement; 378 moniker : String; 379 vaxx : AR.NByte1_Access); 380 381 procedure assign (Stmt : out Base_Statement; 382 moniker : String; 383 vaxx : AR.NByte2_Access); 384 385 procedure assign (Stmt : out Base_Statement; 386 moniker : String; 387 vaxx : AR.NByte3_Access); 388 389 procedure assign (Stmt : out Base_Statement; 390 moniker : String; 391 vaxx : AR.NByte4_Access); 392 393 procedure assign (Stmt : out Base_Statement; 394 moniker : String; 395 vaxx : AR.NByte8_Access); 396 397 procedure assign (Stmt : out Base_Statement; 398 moniker : String; 399 vaxx : AR.Byte1_Access); 400 401 procedure assign (Stmt : out Base_Statement; 402 moniker : String; 403 vaxx : AR.Byte2_Access); 404 405 procedure assign (Stmt : out Base_Statement; 406 moniker : String; 407 vaxx : AR.Byte3_Access); 408 409 procedure assign (Stmt : out Base_Statement; 410 moniker : String; 411 vaxx : AR.Byte4_Access); 412 413 procedure assign (Stmt : out Base_Statement; 414 moniker : String; 415 vaxx : AR.Byte8_Access); 416 417 procedure assign (Stmt : out Base_Statement; 418 moniker : String; 419 vaxx : AR.Real9_Access); 420 421 procedure assign (Stmt : out Base_Statement; 422 moniker : String; 423 vaxx : AR.Real18_Access); 424 425 procedure assign (Stmt : out Base_Statement; 426 moniker : String; 427 vaxx : AR.Str1_Access); 428 429 procedure assign (Stmt : out Base_Statement; 430 moniker : String; 431 vaxx : AR.Str2_Access); 432 433 procedure assign (Stmt : out Base_Statement; 434 moniker : String; 435 vaxx : AR.Str4_Access); 436 437 procedure assign (Stmt : out Base_Statement; 438 moniker : String; 439 vaxx : AR.Time_Access); 440 441 procedure assign (Stmt : out Base_Statement; 442 moniker : String; 443 vaxx : AR.Chain_Access); 444 445 procedure assign (Stmt : out Base_Statement; 446 moniker : String; 447 vaxx : AR.Enum_Access); 448 449 procedure assign (Stmt : out Base_Statement; 450 moniker : String; 451 vaxx : AR.Settype_Access); 452 453 procedure assign (Stmt : out Base_Statement; 454 moniker : String; 455 vaxx : AR.Bits_Access); 456 457 procedure assign (Stmt : out Base_Statement; 458 moniker : String; 459 vaxx : AR.S_UTF8_Access); 460 461 procedure assign (Stmt : out Base_Statement; 462 moniker : String; 463 vaxx : AR.Geometry_Access); 464 465 466 ------------------------------------------- 467 -- 22 assign/value using integer index -- 468 ------------------------------------------- 469 procedure assign (Stmt : out Base_Statement; 470 index : Positive; 471 vaxx : AR.NByte0); 472 473 procedure assign (Stmt : out Base_Statement; 474 index : Positive; 475 vaxx : AR.NByte1); 476 477 procedure assign (Stmt : out Base_Statement; 478 index : Positive; 479 vaxx : AR.NByte2); 480 481 procedure assign (Stmt : out Base_Statement; 482 index : Positive; 483 vaxx : AR.NByte3); 484 485 procedure assign (Stmt : out Base_Statement; 486 index : Positive; 487 vaxx : AR.NByte4); 488 489 procedure assign (Stmt : out Base_Statement; 490 index : Positive; 491 vaxx : AR.NByte8); 492 493 procedure assign (Stmt : out Base_Statement; 494 index : Positive; 495 vaxx : AR.Byte1); 496 497 procedure assign (Stmt : out Base_Statement; 498 index : Positive; 499 vaxx : AR.Byte2); 500 501 procedure assign (Stmt : out Base_Statement; 502 index : Positive; 503 vaxx : AR.Byte3); 504 505 procedure assign (Stmt : out Base_Statement; 506 index : Positive; 507 vaxx : AR.Byte4); 508 509 procedure assign (Stmt : out Base_Statement; 510 index : Positive; 511 vaxx : AR.Byte8); 512 513 procedure assign (Stmt : out Base_Statement; 514 index : Positive; 515 vaxx : AR.Real9); 516 517 procedure assign (Stmt : out Base_Statement; 518 index : Positive; 519 vaxx : AR.Real18); 520 521 procedure assign (Stmt : out Base_Statement; 522 index : Positive; 523 vaxx : AR.Textual); 524 525 procedure assign (Stmt : out Base_Statement; 526 index : Positive; 527 vaxx : AR.Textwide); 528 529 procedure assign (Stmt : out Base_Statement; 530 index : Positive; 531 vaxx : AR.Textsuper); 532 533 procedure assign (Stmt : out Base_Statement; 534 index : Positive; 535 vaxx : CAL.Time); 536 537 procedure assign (Stmt : out Base_Statement; 538 index : Positive; 539 vaxx : AR.Chain); 540 541 procedure assign (Stmt : out Base_Statement; 542 index : Positive; 543 vaxx : AR.Enumtype); 544 545 procedure assign (Stmt : out Base_Statement; 546 index : Positive; 547 vaxx : AR.Settype); 548 549 procedure assign (Stmt : out Base_Statement; 550 index : Positive; 551 vaxx : AR.Bits); 552 553 procedure assign (Stmt : out Base_Statement; 554 index : Positive; 555 vaxx : AR.Text_UTF8); 556 557 procedure assign (Stmt : out Base_Statement; 558 index : Positive; 559 vaxx : Spatial_Data.Geometry); 560 561 562 ----------------------------------------------- 563 -- 23 assign/value using moniker for index -- 564 ----------------------------------------------- 565 procedure assign (Stmt : out Base_Statement; 566 moniker : String; 567 vaxx : AR.NByte0); 568 569 procedure assign (Stmt : out Base_Statement; 570 moniker : String; 571 vaxx : AR.NByte1); 572 573 procedure assign (Stmt : out Base_Statement; 574 moniker : String; 575 vaxx : AR.NByte2); 576 577 procedure assign (Stmt : out Base_Statement; 578 moniker : String; 579 vaxx : AR.NByte3); 580 581 procedure assign (Stmt : out Base_Statement; 582 moniker : String; 583 vaxx : AR.NByte4); 584 585 procedure assign (Stmt : out Base_Statement; 586 moniker : String; 587 vaxx : AR.NByte8); 588 589 procedure assign (Stmt : out Base_Statement; 590 moniker : String; 591 vaxx : AR.Byte1); 592 593 procedure assign (Stmt : out Base_Statement; 594 moniker : String; 595 vaxx : AR.Byte2); 596 597 procedure assign (Stmt : out Base_Statement; 598 moniker : String; 599 vaxx : AR.Byte3); 600 601 procedure assign (Stmt : out Base_Statement; 602 moniker : String; 603 vaxx : AR.Byte4); 604 605 procedure assign (Stmt : out Base_Statement; 606 moniker : String; 607 vaxx : AR.Byte8); 608 609 procedure assign (Stmt : out Base_Statement; 610 moniker : String; 611 vaxx : AR.Real9); 612 613 procedure assign (Stmt : out Base_Statement; 614 moniker : String; 615 vaxx : AR.Real18); 616 617 procedure assign (Stmt : out Base_Statement; 618 moniker : String; 619 vaxx : AR.Textual); 620 621 procedure assign (Stmt : out Base_Statement; 622 moniker : String; 623 vaxx : AR.Textwide); 624 625 procedure assign (Stmt : out Base_Statement; 626 moniker : String; 627 vaxx : AR.Textsuper); 628 629 procedure assign (Stmt : out Base_Statement; 630 moniker : String; 631 vaxx : CAL.Time); 632 633 procedure assign (Stmt : out Base_Statement; 634 moniker : String; 635 vaxx : AR.Chain); 636 637 procedure assign (Stmt : out Base_Statement; 638 moniker : String; 639 vaxx : AR.Enumtype); 640 641 procedure assign (Stmt : out Base_Statement; 642 moniker : String; 643 vaxx : AR.Settype); 644 645 procedure assign (Stmt : out Base_Statement; 646 moniker : String; 647 vaxx : AR.Bits); 648 649 procedure assign (Stmt : out Base_Statement; 650 moniker : String; 651 vaxx : AR.Text_UTF8); 652 653 procedure assign (Stmt : out Base_Statement; 654 moniker : String; 655 vaxx : Spatial_Data.Geometry); 656 657private 658 659 logger_access : ALF.LogFacility_access; 660 661 function Same_Strings (S, T : String) return Boolean; 662 663 function transform_sql (Stmt : out Base_Statement; sql : String) 664 return String; 665 666 procedure log_nominal (statement : Base_Statement; 667 category : Log_Category; 668 message : String); 669 670 procedure free_datarow is new Ada.Unchecked_Deallocation 671 (AR.Sets.Datarow, AR.Sets.Datarow_Access); 672 673 procedure free_sql is new Ada.Unchecked_Deallocation 674 (String, SQL_Access); 675 676 procedure check_bound_column_access (absent : Boolean); 677 678 package Markers is new Ada.Containers.Indefinite_Hashed_Maps 679 (Key_Type => String, 680 Element_Type => Positive, 681 Equivalent_Keys => Same_Strings, 682 Hash => Ada.Strings.Hash); 683 684 function convert is new RGC.convert4str (IntType => AR.NByte1); 685 function convert is new RGC.convert4str (IntType => AR.NByte2); 686 function convert is new RGC.convert4str (IntType => AR.NByte3); 687 function convert is new RGC.convert4str (IntType => AR.NByte4); 688 function convert is new RGC.convert4str (IntType => AR.NByte8); 689 function convert is new RGC.convert4str (IntType => AR.Byte1); 690 function convert is new RGC.convert4str (IntType => AR.Byte2); 691 function convert is new RGC.convert4str (IntType => AR.Byte3); 692 function convert is new RGC.convert4str (IntType => AR.Byte4); 693 function convert is new RGC.convert4str (IntType => AR.Byte8); 694 function convert is new RGC.convert4st2 (RealType => AR.Real9); 695 function convert is new RGC.convert4st2 (RealType => AR.Real18); 696 function convert (nv : String) return AR.Textwide; 697 function convert (nv : String) return AR.Textsuper; 698 699 type bindrec (output_type : field_types := ft_nbyte0) 700 is record 701 bound : Boolean := False; 702 null_data : Boolean := False; 703 case output_type is 704 when ft_nbyte0 => a00 : AR.NByte0_Access; 705 v00 : AR.NByte0; 706 when ft_nbyte1 => a01 : AR.NByte1_Access; 707 v01 : AR.NByte1; 708 when ft_nbyte2 => a02 : AR.NByte2_Access; 709 v02 : AR.NByte2; 710 when ft_nbyte3 => a03 : AR.NByte3_Access; 711 v03 : AR.NByte3; 712 when ft_nbyte4 => a04 : AR.NByte4_Access; 713 v04 : AR.NByte4; 714 when ft_nbyte8 => a05 : AR.NByte8_Access; 715 v05 : AR.NByte8; 716 when ft_byte1 => a06 : AR.Byte1_Access; 717 v06 : AR.Byte1; 718 when ft_byte2 => a07 : AR.Byte2_Access; 719 v07 : AR.Byte2; 720 when ft_byte3 => a08 : AR.Byte3_Access; 721 v08 : AR.Byte3; 722 when ft_byte4 => a09 : AR.Byte4_Access; 723 v09 : AR.Byte4; 724 when ft_byte8 => a10 : AR.Byte8_Access; 725 v10 : AR.Byte8; 726 when ft_real9 => a11 : AR.Real9_Access; 727 v11 : AR.Real9; 728 when ft_real18 => a12 : AR.Real18_Access; 729 v12 : AR.Real18; 730 when ft_textual => a13 : AR.Str1_Access; 731 v13 : AR.Textual; 732 when ft_widetext => a14 : AR.Str2_Access; 733 v14 : AR.Textwide; 734 when ft_supertext => a15 : AR.Str4_Access; 735 v15 : AR.Textsuper; 736 when ft_timestamp => a16 : AR.Time_Access; 737 v16 : CAL.Time; 738 when ft_chain => a17 : AR.Chain_Access; 739 v17 : AR.Textual; 740 when ft_enumtype => a18 : AR.Enum_Access; 741 v18 : AR.Enumtype; 742 when ft_settype => a19 : AR.Settype_Access; 743 v19 : AR.Textual; 744 when ft_bits => a20 : AR.Bits_Access; 745 v20 : AR.Textual; 746 when ft_utf8 => a21 : AR.S_UTF8_Access; 747 v21 : AR.Textual; 748 when ft_geometry => a22 : AR.Geometry_Access; 749 v22 : AR.Textual; 750 end case; 751 end record; 752 753 procedure set_as_null (param : bindrec); 754 755 756 -- For fetch_bound 757 function bind_proceed (Stmt : Base_Statement; index : Positive) 758 return Boolean; 759 760 function bind_index (Stmt : Base_Statement; heading : String) 761 return Positive; 762 763 function assign_index (Stmt : Base_Statement; moniker : String) 764 return Positive; 765 766 procedure auto_assign (Stmt : out Base_Statement; index : Positive; 767 value : String); 768 769 package bind_crate is new Ada.Containers.Vectors 770 (Index_Type => Positive, 771 Element_Type => bindrec); 772 773 type Base_Statement is 774 abstract new Base_Pure and AIS.iStatement with record 775 successful_execution : Boolean := False; 776 result_present : Boolean := False; 777 rows_leftover : Boolean := False; 778 dialect : Driver_Type := foundation; 779 impacted : Affected_Rows := 0; 780 connection : ACB.Base_Connection_Access; 781 alpha_markers : Markers.Map; 782 headings_map : Markers.Map; 783 crate : bind_crate.Vector; 784 realmccoy : bind_crate.Vector; 785 end record; 786 787end AdaBase.Statement.Base; 788