• Setting SQL Modes

    From Lawrence D'Oliveiro@ldo@nz.invalid to comp.databases.mysql on Tue Apr 23 01:18:08 2024
    From Newsgroup: comp.databases.mysql

    MySQL/MariaDB has some nonstandard ways of doing things. But it is
    possible to make it conform more closely to standard SQL by changing
    some mode settings:

    set_sql_mode(db, set_modes = {"ANSI_QUOTES", "NO_BACKSLASH_ESCAPES"})

    where I define the Python functions for getting and setting the SQL
    mode as follows:

    def get_sql_mode(conn) :
    "returns a set of the currently-enabled SQL_MODE values."
    # recognized mode values: <https://mariadb.com/kb/en/sql-mode/>
    return \
    set(eval_expr(conn, "@@sql_mode").split(","))
    #end get_sql_mode

    def set_sql_mode(conn, *, clear_modes = None, set_modes = None) :
    "enables/disables specified SQL_MODE values, returning the previous" \
    " settings. clear_modes, if not None, is a set/sequence of modes to" \
    " be disabled, followed by set_modes, if not None, being a set/sequence" \
    " of new modes to be enabled."
    old_modes = get_sql_mode(conn)
    # always uppercase
    new_modes = set(old_modes)
    if clear_modes != None :
    new_modes.difference_update(c.upper() for c in clear_modes)
    #end if
    if set_modes != None :
    new_modes.update(set_modes)
    #end if
    conn.cursor().execute \
    (
    "set sql_mode = %s"
    %
    sql_string(",".join(new_modes))
    )
    return \
    old_modes
    #end set_sql_mode

    eval_expr is just a simple function that prepends the word rCLSELECTrCY
    onto the given string, and returns the result expression.
    --- Synchronet 3.21d-Linux NewsLink 1.2