Variant HHVM_FUNCTION(mysql_fetch_lengths, const Resource& result) { auto res = php_mysql_extract_result(result); if (res == nullptr) return false; if (res->isLocalized()) { if (!res->isRowReady()) return false; Array ret; for (int i = 0; i < res->getFieldCount(); i++) { MySQLFieldInfo *info = res->getFieldInfo(i); if (info->type == MYSQL_TYPE_YEAR) { // special case for years, because of leading zeros ret.set(i, info->length); } else { // convert fields back to Strings to get lengths ret.set(i, res->getField(i).toString().length()); } } return ret; } MYSQL_RES *mysql_result = res->get(); unsigned long *lengths = mysql_fetch_lengths(mysql_result); if (!lengths) { return false; } Array ret; int num_fields = mysql_num_fields(mysql_result); for (int i = 0; i < num_fields; i++) { ret.set(i, (int)lengths[i]); } return ret; }
bool MySQLResult::fetchRow() { // If not localized, use standard mysql functions on m_res assert(isLocalized()); if (m_current_row != m_rows->end()) m_current_row++; if (m_current_row != m_rows->end()) { m_row_ready = true; return true; } return false; }
void GameObject::setSize(const QSizeF &size) { // устанавливаем новый размер Q_ASSERT(isLocalized()); mSize = size; updateTransform(); // записываем локализованные размеры для текущего языка QString language = Project::getSingleton().getCurrentLanguage(); mWidthMap[language] = mSize.width(); mHeightMap[language] = mSize.height(); }
void GameObject::setPosition(const QPointF &position) { // устанавливаем новую позицию Q_ASSERT(isLocalized()); mPosition = position; updateTransform(); // записываем локализованные координаты для текущего языка QString language = Project::getSingleton().getCurrentLanguage(); mPositionXMap[language] = mPosition.x(); mPositionYMap[language] = mPosition.y(); }
static Variant HHVM_FUNCTION(mysql_result, const Resource& result, int row, const Variant& field /* = 0 */) { auto res = php_mysql_extract_result(result); if (res == nullptr) return false; MYSQL_RES *mysql_result = nullptr; MYSQL_ROW sql_row = nullptr; unsigned long *sql_row_lengths = nullptr; if (res->isLocalized()) { if (!res->seekRow(row)) return false; if (!res->fetchRow()) return false; } else { mysql_result = res->get(); if (row < 0 || row >= (int)mysql_num_rows(mysql_result)) { raise_warning("Unable to jump to row %d on MySQL result index %d", row, result->o_getId()); return false; } mysql_data_seek(mysql_result, row); sql_row = mysql_fetch_row(mysql_result); if (!sql_row) { return false; } sql_row_lengths = mysql_fetch_lengths(mysql_result); if (!sql_row_lengths) { return false; } } int field_offset = 0; if (!field.isNull()) { if (field.isString()) { String sfield = field.toString(); const char *tmp = strchr(sfield.data(), '.'); String table_name, field_name; if (tmp) { int pos = tmp - sfield.data(); table_name = sfield.substr(0, pos); field_name = sfield.substr(pos + 1); } else { field_name = sfield; } int i = 0; bool found = false; res->seekField(0); while (i < res->getFieldCount()) { MySQLFieldInfo *info = res->getFieldInfo(i); if ((table_name.empty() || table_name.same(info->table)) && field_name.same(info->name)) { field_offset = i; found = true; break; } i++; } if (!found) { /* no match found */ raise_warning("%s%s%s not found in MySQL result index %d", table_name.data(), (table_name.empty() ? "" : "."), field_name.data(), result->o_getId()); return false; } } else { field_offset = field.toInt32(); if (field_offset < 0 || field_offset >= (int)res->getFieldCount()) { raise_warning("Bad column offset specified"); return false; } } } if (res->isLocalized()) { Variant f = res->getField(field_offset); if (!f.isNull()) { return f.toString(); } } else { if (sql_row[field_offset]) { return String(sql_row[field_offset], sql_row_lengths[field_offset], CopyString); } } return init_null(); }