2009년 1월 22일 목요일

검색용 SQL문 실행시의 패킷4

EOF Packet
컬럼수만큼의 Field Packet뒤에 EOF Packet이 보내어진다. 
이것은 OK Packet하고 비숫하지만 패킷헤더 직후의 값이  0xfe로 고정되어 있는 점, affected rows하고 insert_id가 없는점, Warning Count하고 Server Status의 순서가 어떤이유에서인지 뒤바뀌어 있다는 점이 다르다. 

EOF Packet
패킷헤더: 4바이트
Field Count:1바이트, 0xfe고정
Warning Count: 2바이트
Status Flags: 2바이트

Row Data Packet
Row Data Packet에는 컬럼값의 정보가 포함되어 있다. 
컬럼값은 Length Coded String표현이다. 이것은  수치형이어도, 날짜/시각형, 바이너리형이어도 같다. 
Row Data Packet1패킷은 1레코드에 해당된다. 
1패킷안에 컬럼수만큼의 정보가 반복포함되어 있다. 

나중에 설명하게 되는 Prepared Statement의 경우에도 검색용 처리라면 같은 형식으로 Row Data Packet을 반환하지만 포맷이 약간 다르다. 

레코드수 만큼의 Row Data Packet이 보내어진 다음에 EOF Packet이 1바이트 추가된다. 
여기에서 검색용 패킷은 완료되고 OK Packet은 사용되지 않는다. 

또 SQL구문에러등이 발생한 경우에는 검색용 패킷 대신에 Error Packet이 보내어진다. 

Row Data Packet
패킷헤더: 4바이트
컬럼수 : LCS   , 문자열크기+컬럼값 (수치여도 LCS표기)
*첫번째컬럼값이 「1」,  두번째 컬럼이 「abc」, 세번째 컬럼이 「2008-12-30 16:18:17」 인 경우 패킷예   
01 31 03 61 62 63 13 32 30 30 38 2d 31 32 2d 33 30 20 31 36 3a 31 38 3a 31 37