46 行
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			46 行
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php defined('BASEPATH') OR exit('No direct script access allowed');
 | |
| 
 | |
| class Migration_add_dxcc_stored_proc extends CI_Migration {
 | |
| 
 | |
|   public function up(){
 | |
|     $res = $this->db->query("drop procedure if exists `find_country`");
 | |
|     if (!$res){
 | |
|       print ("Error dropping stored proc");
 | |
|       exit(0);
 | |
|     }
 | |
| 
 | |
|     $sql = <<<EOF
 | |
| CREATE PROCEDURE `find_country`(
 | |
|   IN callsign varchar(10), 
 | |
|   IN qso_date date, 
 | |
|   OUT country varchar(255),
 | |
|   OUT dxcc_id int)
 | |
| begin
 | |
|   declare calllen int default 0;
 | |
|   set calllen = char_length(callsign);
 | |
|   L1: while calllen >0 do
 | |
|     select `entity`, `adif` into country, dxcc_id
 | |
|       from dxcc_prefixes 
 | |
|       where `call`= substring(callsign, 1, calllen)
 | |
|       and (`start` <= qso_date or `start`='0000-00-00')
 | |
|       and (`end` >= qso_date or `end`='0000-00-00');
 | |
|     if (FOUND_ROWS() >0) THEN
 | |
|       LEAVE L1;
 | |
|     else
 | |
|       set calllen = calllen - 1;
 | |
|     end IF;
 | |
|   end WHILE;
 | |
| end
 | |
| EOF;
 | |
| 
 | |
|     $res = $this->db->query($sql);
 | |
|     if (!$res){
 | |
|       print ("Error setting stored proc");
 | |
|       exit(0);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   public function down(){
 | |
|     $this->db->query("drop procedure if exists `find_country`");
 | |
|   }
 | |
| }
 |