MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / read_one_row

Function read_one_row

sql-common/client.c:1608–1655  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1606
1607
1608static int
1609read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths)
1610{
1611 uint field;
1612 ulong pkt_len,len;
1613 uchar *pos, *prev_pos, *end_pos;
1614 NET *net= &mysql->net;
1615
1616 if ((pkt_len=cli_safe_read(mysql)) == packet_error)
1617 return -1;
1618 if (pkt_len <= 8 && net->read_pos[0] == 254)
1619 {
1620 if (pkt_len > 1) /* MySQL 4.1 protocol */
1621 {
1622 mysql->warning_count= uint2korr(net->read_pos+1);
1623 mysql->server_status= uint2korr(net->read_pos+3);
1624 }
1625 return 1; /* End of data */
1626 }
1627 prev_pos= 0; /* allowed to write at packet[-1] */
1628 pos=net->read_pos;
1629 end_pos=pos+pkt_len;
1630 for (field=0 ; field < fields ; field++)
1631 {
1632 if ((len=(ulong) net_field_length(&pos)) == NULL_LENGTH)
1633 { /* null field */
1634 row[field] = 0;
1635 *lengths++=0;
1636 }
1637 else
1638 {
1639 if (len > (ulong) (end_pos - pos))
1640 {
1641 set_mysql_error(mysql, CR_UNKNOWN_ERROR, unknown_sqlstate);
1642 return -1;
1643 }
1644 row[field] = (char*) pos;
1645 pos+=len;
1646 *lengths++=len;
1647 }
1648 if (prev_pos)
1649 *prev_pos=0; /* Terminate prev field */
1650 prev_pos=pos;
1651 }
1652 row[field]=(char*) prev_pos+1; /* End of last field */
1653 *prev_pos=0; /* Terminate last field */
1654 return 0;
1655}
1656
1657
1658/****************************************************************************

Callers 1

mysql_fetch_rowFunction · 0.85

Calls 3

cli_safe_readFunction · 0.85
net_field_lengthFunction · 0.85
set_mysql_errorFunction · 0.85

Tested by

no test coverage detected