George Law gave me the answer: http://bugs.mysql.com/bug.php?id=14993
I had read the link you suggested, however it didn't really explain why I was getting the error. Thanks. David Godsey > Hello. > > See: > http://dev.mysql.com/doc/refman/5.0/en/gone-away.html > > David Godsey wrote: >> nativecode=2013 ** Lost connection to MySQL server during query >> I think 2016 is Lost database connection >> >> What I am doing is I have a PHP class object that calls a stored >> procedure. I don't think I'm hitting any timeouts because it happens in >> less than a second. So here is my stored procedure: >> >> create procedure getElement (IN n VARCHAR(255),IN ptime DOUBLE) >> BEGIN >> DECLARE mfid INT UNSIGNED; >> DECLARE pid INT UNSIGNED; >> DECLARE foffset INT UNSIGNED; >> DECLARE flength INT UNSIGNED; >> DECLARE vid INT UNSIGNED; >> DECLARE rfid INT UNSIGNED; >> DECLARE tpid INT UNSIGNED; >> DECLARE fdata BLOB; >> DECLARE fdata_tmp BLOB; >> DECLARE fdata_bigint BIGINT UNSIGNED; >> DECLARE fdata_signed INT; >> DECLARE fdata_unsigned INT UNSIGNED; >> DECLARE fdata_float DOUBLE; >> DECLARE data_type VARCHAR(20); >> DECLARE byte_order VARCHAR(20); >> DECLARE conv_param VARCHAR(255); >> >> SELECT major_frame_desc_id, parent_id, frame_offset, >> frame_length, >> version_id, top_level_parent_id >> FROM MajorFrameDescription >> WHERE name=n >> INTO mfid,pid,foffset,flength,vid,tpid; >> >> SELECT attribute_value FROM MajorFrameAttributes >> WHERE major_frame_desc_id=mfid AND >> attribute_name="NormalizedType" >> INTO data_type; >> >> SELECT attribute_value FROM MajorFrameAttributes >> WHERE major_frame_desc_id=mfid AND attribute_name="ConvParams" >> INTO conv_param; >> >> SELECT attribute_value FROM MajorFrameAttributes >> WHERE major_frame_desc_id=mfid AND attribute_name="ByteOrder" >> INTO byte_order; >> >> SELECT MAX(raw_major_frame_id) >> FROM RawMajorFrames >> WHERE major_frame_desc_id=tpid >> INTO rfid; >> >> IF rfid >0 THEN >> >> SELECT payload_time, >> SUBSTR(BINARY(frame_data), >> FLOOR(foffset/8)+1, >> CEIL((flength + (foffset %8 ))/8)) >> FROM RawMajorFrames >> WHERE raw_major_frame_id=rfid >> INTO ptime,fdata; >> >> call toBigInt(fdata,fdata_bigint); >> IF (foffset %8) >0 THEN >> SET @mask_off=foffset%8; >> call mask_data(fdata,@mask_off,fdata_bigint); >> END IF; >> IF (8-((flength+(foffset%8)) %8)) > 0 THEN >> SELECT (fdata_bigint >> >> (8-((flength+(foffset%8)) %8))) INTO >> fdata_bigint; >> END IF; >> CASE data_type >> WHEN "Float" >> THEN >> call >> toFloat(fdata_bigint,fdata_float); >> IF(!ISNULL(conv_param)) THEN >> call >> polyConv(fdata_float,conv_param,fdata_float); >> END IF; >> SET >> @fdata_converted=fdata_float; >> >> WHEN "Double" >> THEN >> call >> toFloat(fdata_bigint,fdata_float); >> IF(!ISNULL(conv_param)) THEN >> call >> polyConv(fdata_float,conv_param,fdata_float); >> END IF; >> SET >> @fdata_converted=fdata_float; >> >> WHEN "Signed" >> THEN >> call >> toSigned(fdata_bigint,fdata_signed); >> SET >> @fdata_converted=fdata_signed; >> WHEN "Unsigned" >> THEN >> SET >> @fdata_converted=fdata_bigint; >> ELSE >> SET @fdata_converted=HEX(fdata); >> END CASE; >> call enumConv(fdata_bigint,mfid,@fdata_enum); >> IF(!ISNULL(@fdata_enum)) THEN >> SET @[EMAIL PROTECTED]; >> END IF; >> >> SELECT >> mfid AS major_frame_desc_id, >> n AS name, >> pid AS parent_id, >> tpid AS top_level_parent_id, >> rfid AS raw_major_frame_id, >> foffset AS frame_offset, >> flength AS frame_length, >> vid AS version_id, >> ptime AS payload_time, >> HEX(fdata) AS raw_data, >> @fdata_converted AS converted_data; >> >> ELSE >> SELECT rfid; >> END IF; >> END >> >> >> Some procedures it uses are: >> CREATE PROCEDURE toBigInt (IN fdata BLOB,OUT fdata_int BIGINT UNSIGNED) >> BEGIN >> SET @string_data=CONCAT('0x',HEX(fdata)); >> DROP TEMPORARY TABLE IF EXISTS make_conversion; >> CREATE TEMPORARY TABLE make_conversion(toint BIGINT UNSIGNED); >> SET @q=CONCAT('INSERT INTO make_conversion set >> toint=(',@string_data,'+0)'); >> PREPARE st1 from @q; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT toint from make_conversion into fdata_int; >> END >> $$ >> >> CREATE PROCEDURE toUnsigned (IN fdata BIGINT UNSIGNED,OUT fdata_int INT >> UNSIGNED) >> BEGIN >> SET @string_data=CONCAT('0x',HEX(fdata)); >> DROP TEMPORARY TABLE IF EXISTS make_conversion; >> CREATE TEMPORARY TABLE make_conversion(toint INT UNSIGNED); >> SET @q=CONCAT('INSERT INTO make_conversion set >> toint=(',@string_data,'+0)'); >> PREPARE st1 from @q; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT toint from make_conversion into fdata_int; >> END >> $$ >> >> CREATE PROCEDURE toSigned (IN fdata BIGINT UNSIGNED,OUT fdata_int INT) >> BEGIN >> SET @string_data=CONCAT('0x',HEX(fdata)); >> DROP TEMPORARY TABLE IF EXISTS make_conversion; >> CREATE TEMPORARY TABLE make_conversion(toint INT); >> SET @q=CONCAT('INSERT INTO make_conversion set >> toint=(',@string_data,'+0)'); >> PREPARE st1 from @q; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT toint from make_conversion into fdata_int; >> END >> $$ >> >> >> CREATE PROCEDURE toFloat (IN fdata BIGINT UNSIGNED,OUT fdata_float >> DOUBLE) >> BEGIN >> SET @string_data=CONCAT('0x',HEX(fdata)); >> DROP TEMPORARY TABLE IF EXISTS make_conversion; >> CREATE TEMPORARY TABLE make_conversion(tofloat DOUBLE); >> SET @q=CONCAT('INSERT INTO make_conversion set >> tofloat=(',@string_data,'+0)'); >> PREPARE st1 from @q; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT tofloat from make_conversion into fdata_float; >> END >> $$ >> >> CREATE PROCEDURE shift_right(IN fdata_bigint BIGINT UNSIGNED,IN shift >> INT >> UNSIGNED,OUT fdata_bigint2 BIGINT UNSIGNED) >> BEGIN >> SELECT fdata_bigint >> shift INTO fdata_bigint2; >> END >> $$ >> >> CREATE PROCEDURE mask_data(IN fdata BLOB,IN mask_off INT UNSIGNED,OUT >> fdata_bigint2 BIGINT UNSIGNED) >> BEGIN >> DECLARE top_byte TINYBLOB; >> DECLARE top_int BIGINT UNSIGNED; >> SELECT SUBSTR(BINARY(fdata),1,1) INTO top_byte; >> call toBigInt(top_byte,top_int); >> SELECT ((top_int << mask_off) & 0xFF) >> mask_off INTO top_int; >> SET >> @string_data=CONCAT('0x',HEX(top_int),HEX(SUBSTR(BINARY(fdata),2))); >> DROP TEMPORARY TABLE IF EXISTS make_conversion; >> CREATE TEMPORARY TABLE make_conversion(toint INT); >> SET @q=CONCAT('INSERT INTO make_conversion set >> toint=(',@string_data,'+0)'); >> PREPARE st1 from @q; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT toint FROM make_conversion INTO fdata_bigint2; >> END >> $$ >> CREATE PROCEDURE polyConv(IN fdata DOUBLE,IN conv_param VARCHAR(255),OUT >> fdata_converted DOUBLE) >> BEGIN >> DECLARE beginning VARCHAR(255); >> DECLARE end_of VARCHAR(255); >> DECLARE query VARCHAR(255); >> SELECT SUBSTR(conv_param,1,POSITION('x' in conv_param)-1) INTO >> beginning; >> SELECT SUBSTR(conv_param,POSITION('x' in conv_param)+1) INTO >> end_of; >> SET @string_query=CONCAT("SELECT ",beginning,fdata,end_of,"INTO >> @fdata_converted"); >> PREPARE st1 FROM @string_query; >> EXECUTE st1; >> DEALLOCATE PREPARE st1; >> SELECT @fdata_converted INTO fdata_converted; >> END >> $$ >> >> CREATE PROCEDURE enumConv(IN fdata INT UNSIGNED,mfid INT UNSIGNED,OUT >> fdata_converted >> VARCHAR(100)) >> BEGIN >> SELECT name FROM EnumLiterals >> WHERE major_frame_desc_id=mfid AND value=fdata >> INTO fdata_converted; >> END >> Are there some error cases I'm failing to catch and that is the cause of >> the apparent database connection loss? >> BTW: these are the first procedures I've writting so I'm a novice with >> stored procedures. >> >> Accomplishing the impossible means only that the boss will add it to >> your >> regular duties. >> >> David Godsey >> > > > -- > For technical support contracts, goto https://order.mysql.com/?ref=ensita > This email is sponsored by Ensita.NET http://www.ensita.net/ > __ ___ ___ ____ __ > / |/ /_ __/ __/ __ \/ / Gleb Paharenko > / /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED] > /_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.NET > <___/ www.mysql.com > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: > http://lists.mysql.com/[EMAIL PROTECTED] > Accomplishing the impossible means only that the boss will add it to your regular duties. David Godsey -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]