#include <sqlrelay/sqlrserver.h>
#include <rudiments/stringbuffer.h>

class SQLRSERVER_DLLSPEC lowercase : public sqlrresultsettranslation {
        public:
                        lowercase(sqlrresultsettranslations *sqlrrsts,
                                                xmldomnode *parameters);

                bool    run(sqlrserverconnection *sqlrcon,
                                        sqlrservercursor *sqlrcur,
                                        const char *fieldname,
                                        uint16_t fieldindex,
                                        const char *field,
                                        uint32_t fieldlength,
                                        const char **newfield,
                                        uint32_t *newfieldlength);
        private:
                stringbuffer    newfieldbuffer;
};

lowercase::lowercase(sqlrresultsettranslations *sqlrrsts,
                                                xmldomnode *parameters) :
                                sqlrresultsettranslation(sqlrrsts,parameters) {
}

bool lowercase::run(sqlrserverconnection *sqlrcon,
                                        sqlrservercursor *sqlrcur,
                                        const char *fieldname,
                                        uint16_t fieldindex,
                                        const char *field,
                                        uint32_t fieldlength,
                                        const char **newfield,
                                        uint32_t *newfieldlength) {

        newfieldbuffer.clear();

        for (uint32_t i=0; i<fieldlength; i++) {
                newfieldbuffer.append(character::toLower(field[i]));
        }

        *newfield=newfieldbuffer.getString();
        *newfieldlength=newfieldbuffer.getStringLength();

        return true;
}

extern "C" {
        SQLRSERVER_DLLSPEC sqlrresultsettranslation
                                *new_sqlrresultsettranslation_mask(
                                        sqlrresultsettranslations *sqlrrsts,
                                        xmldomnode *parameters) {
                return new mask(sqlrrsts,parameters);
        }
}