~mathiaz/ubuntu/lucid/mysql-dfsg-5.1/zap-bug-552053

« back to all changes in this revision

Viewing changes to storage/innobase/row/row0sel.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathias Gug
  • Date: 2009-06-25 12:55:45 UTC
  • mfrom: (1.1.2 upstream) (0.1.3 experimental)
  • Revision ID: james.westby@ubuntu.com-20090625125545-m8ogs96zzsri74xe
Tags: 5.1.34-1ubuntu1
* Merge from debian experimental (and 5.0 from main), remaining changes:
  - debian/mysql-server-5.1.config:
    + ask for MySQL root password at priority high instead of medium so
      that the password prompt is seen on a default install. (LP: #319843)
    + don't ask for root password when upgrading from a 5.0 install.
  - debian/control:
    + Make libmysqlclient16-dev a transitional package depending on
      libmysqlclient-dev.
    + Make libmysqlclient-dev conflict with libmysqlclient15-dev.
    + Don't build mysql-server, mysql-client, mysql-common and
      libmysqlclient15-dev binary packages since they're still provided
      by mysql-dfsg-5.0.
    + Make mysql-{client,server}-5.1 packages conflict and
      replace mysql-{client,server}-5.0, but not provide
      mysql-{client,server}.
    + Depend on a specific version of mysql-common rather than the src
      version of mysql-dfsg-5.1 since mysql-common is currently part of
      mysql-dfsg-5.0.
    + Lower mailx from a Recommends to a Suggests to avoid pulling in
      a full MTA on all installs of mysql-server. (LP: #259477)
  - debian/rules:
    + added -fno-strict-aliasing to CFLAGS to get around mysql testsuite
      build failures.
    + install mysql-test and sql-bench to /usr/share/mysql/ rather than
      /usr/.
  - debian/additions/debian-start.inc.sh: support ANSI mode (LP: #310211)
  - Add AppArmor profile:
    - debian/apparmor-profile: apparmor profile.
    - debian/rules, debian/mysql-server-5.0.files: install apparmor profile.
    - debian/mysql-server-5.0.dirs: add etc/apparmor.d/force-complain
    - debian/mysql-server-5.0.postrm: remove symlink in force-complain/ on
      purge.
    - debian/mysql-server-5.1.README.Debian: add apparmor documentation.
    - debian/additions/my.cnf: Add warning about apparmor. (LP: #201799)
    - debian/mysql-server-5.1.postinst: reload apparmor profiles.
  - debian/additions/my.cnf: remove language option. Error message files are
    located in a different directory in MySQL 5.0. Setting the language
    option to use /usr/share/mysql/english breaks 5.0. Both 5.0 and 5.1
    use a default value that works. (LP: #316974)
  - debian/mysql-server-5.1.mysql.init:
    + Clearly indicate that we do not support running multiple instances
      of mysqld by duplicating the init script.
      (closes: #314785, #324834, #435165, #444216)
    + Properly parameterize all existing references to the mysql config
      file (/etc/mysql/my.cnf).
  - debian/mysql-server-5.0.postinst: Clear out the second password
    when setting up mysql. (LP: #344816)
  - mysql-server-core-5.1 package for files needed by Akonadi:
    + debian/control: create mysql-server-core-5.1 package.
    + debian/mysql-server-core-5.1.files, debian/mysql-server-5.1.files:
      move core mysqld files to mysql-server-core-5.1 package.
  - Don't package sql-bench and mysql-test file.
* Dropped changes:
  - debian/patches/92_ssl_test_cert.dpatch: certificate expiration in
    test suite (LP: #323755). Included upstream.
* Dropped from 5.0:
  - apparmor profile:
    - debian/control: Recommends apparmor >= 2.1+1075-0ubuntu6. All version
      of apparmor-profile (>hardy) are higher than this version.
    - debian/mysql-server-5.0.preinst: create symlink for force-complain/
      on pre-feisty upgrades, upgrades where apparmor-profiles profile is
      unchanged (ie non-enforcing) and upgrades where the profile
      doesn't exist. Support for pre-hardy upgrades is no longer needed.
* debian/mysql-server-5.1.postinst: fix debian-sys-maint user creation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2597
2597
        ulint                   i;
2598
2598
 
2599
2599
        ut_ad(prebuilt->mysql_template);
 
2600
        ut_ad(prebuilt->default_rec);
2600
2601
        ut_ad(rec_offs_validate(rec, NULL, offsets));
2601
2602
 
2602
2603
        if (UNIV_LIKELY_NULL(prebuilt->blob_heap)) {
2683
2684
                                        &= ~(byte) templ->mysql_null_bit_mask;
2684
2685
                        }
2685
2686
                } else {
2686
 
                        /* MySQL seems to assume the field for an SQL NULL
2687
 
                        value is set to zero or space. Not taking this into
2688
 
                        account caused seg faults with NULL BLOB fields, and
2689
 
                        bug number 154 in the MySQL bug database: GROUP BY
2690
 
                        and DISTINCT could treat NULL values inequal. */
2691
 
                        int     pad_char;
 
2687
                        /* MySQL assumes that the field for an SQL
 
2688
                        NULL value is set to the default value. */
2692
2689
 
2693
2690
                        mysql_rec[templ->mysql_null_byte_offset]
2694
2691
                                |= (byte) templ->mysql_null_bit_mask;
2695
 
                        switch (templ->type) {
2696
 
                        case DATA_VARCHAR:
2697
 
                        case DATA_BINARY:
2698
 
                        case DATA_VARMYSQL:
2699
 
                                if (templ->mysql_type
2700
 
                                    == DATA_MYSQL_TRUE_VARCHAR) {
2701
 
                                        /* This is a >= 5.0.3 type
2702
 
                                        true VARCHAR.  Zero the field. */
2703
 
                                        pad_char = 0x00;
2704
 
                                        break;
2705
 
                                }
2706
 
                                /* Fall through */
2707
 
                        case DATA_CHAR:
2708
 
                        case DATA_FIXBINARY:
2709
 
                        case DATA_MYSQL:
2710
 
                                /* MySQL pads all string types (except
2711
 
                                BLOB, TEXT and true VARCHAR) with space. */
2712
 
                                if (UNIV_UNLIKELY(templ->mbminlen == 2)) {
2713
 
                                        /* Treat UCS2 as a special case. */
2714
 
                                        data = mysql_rec
2715
 
                                                + templ->mysql_col_offset;
2716
 
                                        len = templ->mysql_col_len;
2717
 
                                        /* There are two UCS2 bytes per char,
2718
 
                                        so the length has to be even. */
2719
 
                                        ut_a(!(len & 1));
2720
 
                                        /* Pad with 0x0020. */
2721
 
                                        while (len) {
2722
 
                                                *data++ = 0x00;
2723
 
                                                *data++ = 0x20;
2724
 
                                                len -= 2;
2725
 
                                        }
2726
 
                                        continue;
2727
 
                                }
2728
 
                                pad_char = 0x20;
2729
 
                                break;
2730
 
                        default:
2731
 
                                pad_char = 0x00;
2732
 
                                break;
2733
 
                        }
2734
 
 
2735
 
                        ut_ad(!pad_char || templ->mbminlen == 1);
2736
 
                        memset(mysql_rec + templ->mysql_col_offset,
2737
 
                               pad_char, templ->mysql_col_len);
 
2692
                        memcpy(mysql_rec + templ->mysql_col_offset,
 
2693
                               prebuilt->default_rec + templ->mysql_col_offset,
 
2694
                               templ->mysql_col_len);
2738
2695
                }
2739
2696
        }
2740
2697