Details

    • Type: New Feature New Feature
    • Status: Awaiting Feedback
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None

      Description

      Implemented support for Interbase/Firebird dialects

        Activity

        Hide
        Andreas Prucha added a comment - - edited

        Hi all,

        I've create a driver (or two) for Firebird.

        The development branch is available at

        https://github.com/helicon-os/doctrine-dbal.git DBAL-95-firebird

        There are two versions of the driver: One is based on the ibase-api, there other on Firebird PDO.

        I'd consider the ibase-version as almost finished, the PDO-Version is rather experimental.

        Just send me a comment and maybe we can merge it into the official doctrine dbal (propably just the ibase-version, not the PDO-Version - at least not as long the driver problems are not fixed)

        I've tested it with FB 2.5, but not with the upcoming FB 3 or Interbase.

        ___________________
        ibase_firebird

        The Ibase-Driver passes the complete Doctrine-Testsuite.

        ___________________
        pdo_firebird

        The PDO-Version does not, and it has some limitations which may be related to Firebirds PDO interface itself:

        • BLOBs: Runs into memory leaks if BLOBs are used quite quickly
        • PDO Firebird's transaction handling is quite strange and the reason why it does not pass the testsuite.
        • Nested Transactions (Savepoints): Fails despite Firebird supports them. -
        • Turns a negative signed 32bit integer into a positive unsigned, if the client is running a 64bit-system. I fixed this with a special IntegerType Class in a project, but that's a ugly workaround.
        Show
        Andreas Prucha added a comment - - edited Hi all, I've create a driver (or two) for Firebird. The development branch is available at https://github.com/helicon-os/doctrine-dbal.git DBAL-95 -firebird There are two versions of the driver: One is based on the ibase-api, there other on Firebird PDO. I'd consider the ibase-version as almost finished, the PDO-Version is rather experimental. Just send me a comment and maybe we can merge it into the official doctrine dbal (propably just the ibase-version, not the PDO-Version - at least not as long the driver problems are not fixed) I've tested it with FB 2.5, but not with the upcoming FB 3 or Interbase. ___________________ ibase_firebird The Ibase-Driver passes the complete Doctrine-Testsuite. ___________________ pdo_firebird The PDO-Version does not, and it has some limitations which may be related to Firebirds PDO interface itself: BLOBs: Runs into memory leaks if BLOBs are used quite quickly PDO Firebird's transaction handling is quite strange and the reason why it does not pass the testsuite. Nested Transactions (Savepoints): Fails despite Firebird supports them. - Turns a negative signed 32bit integer into a positive unsigned, if the client is running a 64bit-system. I fixed this with a special IntegerType Class in a project, but that's a ugly workaround.
        Hide
        Andreas Prucha added a comment -

        One more comment:

        I am not sure how to handle one firebird-specificity: Firebird does not preserve the case of identity-names and converts them all-upper, unless they are quoted. The behaviour looks quite similar to Oracle.

        Currently I do not normalize names as the Oracle-driver does, which leads to the problem, that they are all-upper in the database anyway, but automatically quoted keywords are lowercase.

        Which behaviour would you guys prefere:

        Normalize them All-Upper if not quoted (including keywords)? This would allow case-insensitive references in queries, because Firebird handles unquoted names as all-upper.
        Quote everything to preserve case: Unfortunately this would require manual quoting in every query.

        Personally I do not really like this all-upper-pattern, but having to quote every identifier everywhere looks even more cumbersome, so it's propably the best to follow the behaviour of the oracle driver and assume uppercase if not quoted.

        Does any platform have configuration-options? It might be a solution to let the user decide about the naming, e.g.

        setNamingConvention(ALL_UPPER | PRESERVE_CASE)

        BTW - Is the doctrine-dev mailinglist gone? I wanted to send this there, but it came back with an error.

        Andreas

        Show
        Andreas Prucha added a comment - One more comment: I am not sure how to handle one firebird-specificity: Firebird does not preserve the case of identity-names and converts them all-upper, unless they are quoted. The behaviour looks quite similar to Oracle. Currently I do not normalize names as the Oracle-driver does, which leads to the problem, that they are all-upper in the database anyway, but automatically quoted keywords are lowercase. Which behaviour would you guys prefere: Normalize them All-Upper if not quoted (including keywords)? This would allow case-insensitive references in queries, because Firebird handles unquoted names as all-upper. Quote everything to preserve case: Unfortunately this would require manual quoting in every query. Personally I do not really like this all-upper-pattern, but having to quote every identifier everywhere looks even more cumbersome, so it's propably the best to follow the behaviour of the oracle driver and assume uppercase if not quoted. Does any platform have configuration-options? It might be a solution to let the user decide about the naming, e.g. setNamingConvention(ALL_UPPER | PRESERVE_CASE) BTW - Is the doctrine-dev mailinglist gone? I wanted to send this there, but it came back with an error. Andreas
        Hide
        Andreas Prucha added a comment -

        Is it possible to setup a firebird test environment at travis?

        Show
        Andreas Prucha added a comment - Is it possible to setup a firebird test environment at travis?

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Benjamin Eberlei
          • Votes:
            6 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated: