~peter-gulutzan-b/mdbug/trunk

« back to all changes in this revision

Viewing changes to install.sql

  • Committer: Peter Gulutzan
  • Date: 2012-06-13 22:05:38 UTC
  • Revision ID: peter.gulutzan@hp.com-20120613220538-ig6b4182e71rd5zz
debuggee_wait_loop accepts breakpoint commands

Show diffs side-by-side

added added

removed removed

Lines of Context:
143
143
DROP PROCEDURE IF EXISTS xxxmdbug.mysql_proc_insert_caller//
144
144
DROP PROCEDURE IF EXISTS xxxmdbug.overflow_check//
145
145
DROP PROCEDURE IF EXISTS xxxmdbug.privilege_checks//
 
146
DROP PROCEDURE IF EXISTS xxxmdbug.reset//
146
147
DROP PROCEDURE IF EXISTS xxxmdbug.retype//
147
148
DROP PROCEDURE IF EXISTS xxxmdbug.routine_entry//
148
149
DROP PROCEDURE IF EXISTS xxxmdbug.routine_exit//
4556
4557
*/
4557
4558
CREATE PROCEDURE xxxmdbug.become_debuggee_connection (xxxmdbug_channel VARCHAR(66) CHARACTER SET utf8)
4558
4559
BEGIN
 
4560
  CALL xxxmdbug.reset(xxxmdbug_channel,0);
 
4561
  END//
 
4562
 
 
4563
/* become_debuggee_connection calls reset(0) which initializes everything including breakpoints
 
4564
   debuggee_wait_loop calls reset(1) which initializes everything but leaves breakpoints mostly intact */
 
4565
CREATE PROCEDURE xxxmdbug.reset (xxxmdbug_channel VARCHAR(66) CHARACTER SET utf8, flags INT)
 
4566
BEGIN
4559
4567
  DECLARE v INT;
 
4568
  DECLARE v_breakpoint_identifier INT;
 
4569
  DECLARE v_n INT;
 
4570
  DECLARE v_flags INT;
4560
4571
 
4561
4572
  /* todo: this is wrong, it is too generic, it handles signal 5678 even */
4562
4573
  DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN select 'Failure. Check privileges.'; RESIGNAL; END;
4571
4582
 
4572
4583
  CALL xxxmdbug.fixed_routines_clear();
4573
4584
  CALL xxxmdbug.fixed_variables_clear();
4574
 
  CALL xxxmdbug.fixed_breakpoints_clear();
 
4585
  IF flags = 0 OR @xxxmdbug_breakpoints_breakpoint_identifier IS NULL THEN
 
4586
    CALL xxxmdbug.fixed_breakpoints_clear();
 
4587
  ELSE
 
4588
    SET v_n=0;
 
4589
    x: LOOP
 
4590
      CALL xxxmdbug.fixed_select(@xxxmdbug_breakpoints_breakpoint_identifier,10,v_n,v_breakpoint_identifier,v_flags);
 
4591
      IF v_flags=-1 THEN LEAVE x; END IF;
 
4592
      CALL xxxmdbug.fixed_update(@xxxmdbug_breakpoints_is_matching_location,5,v_n,0);
 
4593
      CALL xxxmdbug.fixed_update(@xxxmdbug_breakpoints_hit_count,10,v_n,0);
 
4594
      CALL xxxmdbug.fixed_update(@xxxmdbug_breakpoints_is_matching_condition,5,v_n,0);
 
4595
      SET v_n=v_n+1;
 
4596
      END LOOP;
 
4597
    END IF;
4575
4598
  CALL xxxmdbug.fixed_statements_executed_clear();
4576
4599
  CALL xxxmdbug.fixed_prepared_statements_clear();
4577
4600
 
4799
4822
      DECLARE EXIT HANDLER FOR 5678 BEGIN select '5678'; SET v_exception = 5678; END; /* exit or debugger error */
4800
4823
      DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN select 'sqlexception'; /* send a message that exit is happening */ END;
4801
4824
 
4802
 
      CALL xxxmdbug.become_debuggee_connection(@xxxmdbug_channel); /* a fresh start for each loop iteration. */
 
4825
      CALL xxxmdbug.reset(@xxxmdbug_channel,1); /* a fresh start for each loop iteration. */
4803
4826
 
4804
 
      SET @xxxmdbug_is_attached=1; /* become_debuggee_connection() sets this to 0, unnecessarily */
 
4827
      SET @xxxmdbug_is_attached=1; /* reset() sets this to 0, unnecessarily */
4805
4828
 
4806
4829
      /* Get a command. If it is not 'debug' then ignore it (but send a message), it is probably a leftover.
4807
4830
         Exceptions: 'exit' is never ignored, 'attach' is always successful. */
4816
4839
      IF @xxxmdbug_token_value_1='exit' THEN
4817
4840
        SIGNAL SQLSTATE '56780' set mysql_errno=@xxxmdbug_signal_errno,message_text='exit command received';
4818
4841
        END IF;
 
4842
      IF @xxxmdbug_token_value_1 IN ('breakpoint','tbreakpoint','clear','refresh','delete') THEN
 
4843
        CALL xxxmdbug.icc_process_user_command();
 
4844
        CALL xxxmdbug.icc_send_statement_status('debuggee_wait_loop');
 
4845
        ITERATE x;
 
4846
        END IF;
4819
4847
      IF @xxxmdbug_token_value_1<>'debug' THEN
4820
4848
        SET @xxxmdbug_status_last_command = @xxxmdbug_token_value_1;
4821
4849
        SET @xxxmdbug_status_last_command_result = '"ignored, the expected command is debug"';