~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/function/str/insert.cc

Does not work (compile issue in plugin).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems, Inc.
 
4
 *  Copyright (C) 2008 Sun Microsystems
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include <config.h>
 
20
#include "config.h"
21
21
 
22
22
#include <drizzled/function/str/insert.h>
23
23
#include <drizzled/error.h>
24
24
#include <drizzled/session.h>
25
 
#include <drizzled/system_variables.h>
26
25
 
27
 
namespace drizzled {
 
26
namespace drizzled
 
27
{
28
28
 
29
29
String *Item_func_insert::val_str(String *str)
30
30
{
42
42
      args[3]->null_value)
43
43
    goto null;
44
44
 
45
 
  if ((start < 0) || (start > static_cast<int64_t>(res->length())))
 
45
  if ((start < 0) || (start > res->length()))
46
46
    return res;                                 // Wrong param; skip insert
47
 
  if ((length < 0) || (length > static_cast<int64_t>(res->length())))
 
47
  if ((length < 0) || (length > res->length()))
48
48
    length= res->length();
49
49
 
50
50
  /* start and length are now sufficiently valid to pass to charpos function */
52
52
   length= res->charpos((int) length, (uint32_t) start);
53
53
 
54
54
  /* Re-testing with corrected params */
55
 
  if (start > static_cast<int64_t>(res->length()))
 
55
  if (start > res->length())
56
56
    return res;
57
 
  if (length > static_cast<int64_t>(res->length()) - start)
 
57
  if (length > res->length() - start)
58
58
    length= res->length() - start;
59
59
 
60
60
  if ((uint64_t) (res->length() - length + res2->length()) >
61
 
      (uint64_t) session.variables.max_allowed_packet)
 
61
      (uint64_t) current_session->variables.max_allowed_packet)
62
62
  {
63
 
    push_warning_printf(&session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
 
63
    push_warning_printf(current_session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
64
64
                        ER_WARN_ALLOWED_PACKET_OVERFLOWED,
65
65
                        ER(ER_WARN_ALLOWED_PACKET_OVERFLOWED),
66
 
                        func_name(), session.variables.max_allowed_packet);
 
66
                        func_name(), current_session->variables.max_allowed_packet);
67
67
    goto null;
68
68
  }
69
69
  res=copy_if_not_alloced(str,res,res->length());
74
74
  return 0;
75
75
}
76
76
 
 
77
 
77
78
void Item_func_insert::fix_length_and_dec()
78
79
{
79
 
    // Handle character set for args[0] and args[3].
 
80
  uint64_t max_result_length;
 
81
 
 
82
  // Handle character set for args[0] and args[3].
80
83
  if (agg_arg_charsets(collation, &args[0], 2, MY_COLL_ALLOW_CONV, 3))
81
84
    return;
82
 
  uint64_t max_result_length= ((uint64_t) args[0]->max_length + (uint64_t) args[3]->max_length);
 
85
  max_result_length= ((uint64_t) args[0]->max_length+
 
86
                      (uint64_t) args[3]->max_length);
83
87
  if (max_result_length >= MAX_BLOB_WIDTH)
84
88
  {
85
89
    max_result_length= MAX_BLOB_WIDTH;