47 行
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			47 行
		
	
	
	
		
			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`");
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |