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]