~maria-captains/maria/10.0

« back to all changes in this revision

Viewing changes to storage/connect/tabxml.cpp

  • Committer: Olivier Bertrand
  • Date: 2014-02-03 15:14:13 UTC
  • mto: This revision was merged to the branch mainline in revision 3984.
  • Revision ID: bertrandop@gmail.com-20140203151413-ps3oglvhb4lksxxy
This is a major update of CONNECT that goes from version 1.1 to 1.2
===================================================================
- Implement a first support of the ALTER TABLE command. This fixes MDEV-5440
  but does much more than only that. See the details of how ALTER is supported
  in the new documentation and also in MDEV-5440 comment.
  This is done principally by implementing for CONNECT the virtual function
  check_if_supported_inplace_alter.
modified:
  storage/connect/connect.cc
  storage/connect/global.h
  storage/connect/ha_connect.cc
  storage/connect/ha_connect.h
  storage/connect/mysql-test/connect/r/bin.result
  storage/connect/mysql-test/connect/r/csv.result
  storage/connect/mysql-test/connect/r/dbf.result
  storage/connect/mysql-test/connect/r/dir.result
  storage/connect/mysql-test/connect/r/fix.result
  storage/connect/mysql-test/connect/r/index.result
  storage/connect/mysql-test/connect/r/ini.result
  storage/connect/mysql-test/connect/r/occur.result
  storage/connect/mysql-test/connect/r/pivot.result
  storage/connect/mysql-test/connect/r/vec.result
  storage/connect/mysql-test/connect/t/dbf.test
  storage/connect/plugutil.c
  storage/connect/user_connect.cc

- Fixes the tabname/table_name issue for XML tables. Implement
  multiple files XML tables.
modified:
  storage/connect/tabxml.cpp
  storage/connect/tabxml.h

- Set to varchar(256) the fields of catalog tables stored
  as STRBLK's (had length 0 --> CHAR(1))
  Add the GetCharString function to the VALBLK class
modified:
  storage/connect/ha_connect.cc
  storage/connect/valblk.cpp
  storage/connect/valblk.h
  storage/connect/value.cpp

- Translate CONNECT error messages to system_charset
  to avoid truncation on not ASCII characters.
modified:
  storage/connect/ha_connect.cc

- Update version number
modified:
  storage/connect/ha_connect.cc
  storage/connect/mysql-test/connect/r/xml.result

- Move the TDBASE::data_charset body from xtable.h to table.cpp.
  (dont' remember why)
modified:
  storage/connect/table.cpp
  storage/connect/xtable.h

- Other modifications are to enhance the support of OEM tables.
  In particular, they can now provide column definition in dicovery.
modified:
  storage/connect/colblk.h
  storage/connect/global.h
  storage/connect/ha_connect.cc
  storage/connect/mycat.cc
  storage/connect/plgcnx.h
  storage/connect/plgdbsem.h
  storage/connect/xtable.h

- Or to add or modify tracing.
modified:
  storage/connect/filamtxt.cpp
  storage/connect/ha_connect.cc
  storage/connect/plgdbutl.cpp
  storage/connect/tabfix.cpp
  storage/connect/tabmysql.cpp

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/************* Tabxml C++ Program Source Code File (.CPP) **************/
2
2
/* PROGRAM NAME: TABXML                                                */
3
3
/* -------------                                                       */
4
 
/*  Version 2.6                                                        */
 
4
/*  Version 2.7                                                        */
5
5
/*                                                                     */
6
 
/*  Author Olivier BERTRAND          2007 - 2013                       */
 
6
/*  Author Olivier BERTRAND          2007 - 2014                       */
7
7
/*                                                                     */
8
8
/*  This program are the XML tables classes using MS-DOM or libxml2.   */
9
9
/***********************************************************************/
47
47
#include "xindex.h"
48
48
#include "plgxml.h"
49
49
#include "tabxml.h"
 
50
#include "tabmul.h"
50
51
 
51
52
extern "C" {
52
53
extern char version[];
136
137
    } // endswitch typname
137
138
 
138
139
  Tabname = Cat->GetStringCatInfo(g, "Name", Name);  // Deprecated
139
 
  Tabname = Cat->GetStringCatInfo(g, "Table_name", Tabname);
 
140
  Tabname = Cat->GetStringCatInfo(g, "Table_name", Tabname); // Deprecated
 
141
  Tabname = Cat->GetStringCatInfo(g, "Tabname", Tabname);
140
142
  Rowname = Cat->GetStringCatInfo(g, "Rownode", defrow);
141
143
  Colname = Cat->GetStringCatInfo(g, "Colnode", defcol);
142
144
  Mulnode = Cat->GetStringCatInfo(g, "Mulnode", "");
177
179
/***********************************************************************/
178
180
PTDB XMLDEF::GetTable(PGLOBAL g, MODE m)
179
181
  {
180
 
  return new(g) TDBXML(this);
 
182
  PTDBASE tdbp = new(g) TDBXML(this);
 
183
 
 
184
  if (Multiple)
 
185
    tdbp = new(g) TDBMUL(tdbp);
 
186
 
 
187
  return tdbp;
181
188
  } // end of GetTable
182
189
 
183
190
/***********************************************************************/
245
252
  Void = false;
246
253
  Usedom = tdp->Usedom;
247
254
  Header = tdp->Header;
 
255
  Multiple = tdp->Multiple;
248
256
  Nrow = -1;
249
257
  Irow = Header - 1;
250
258
  Nsub = 0;
287
295
  Void = tdbp->Void;
288
296
  Usedom = tdbp->Usedom;
289
297
  Header = tdbp->Header;
 
298
  Multiple = tdbp->Multiple;
290
299
  Nrow = tdbp->Nrow;
291
300
  Irow = tdbp->Irow;
292
301
  Nsub = tdbp->Nsub;
578
587
#endif
579
588
  } // end of try-catches
580
589
 
581
 
  if (Root && Columns && !Nodedone) {
 
590
  if (Root && Columns && (Multiple || !Nodedone)) {
582
591
    // Allocate class nodes to avoid dynamic allocation
583
592
    for (colp = (PXMLCOL)Columns; colp; colp = (PXMLCOL)colp->GetNext())
584
593
      if (!colp->IsSpecial())            // Not a pseudo column
671
680
int TDBXML::Cardinality(PGLOBAL g)
672
681
  {
673
682
  if (!g)
674
 
    return (Xpand || Coltype == 2) ? 0 : 1;
 
683
    return (Multiple || Xpand || Coltype == 2) ? 0 : 1;
 
684
 
 
685
  if (Multiple)
 
686
    return 10;
675
687
 
676
688
  if (Nrow < 0)
677
689
    if (Initialize(g))
685
697
/***********************************************************************/
686
698
int TDBXML::GetMaxSize(PGLOBAL g)
687
699
  {
688
 
  if (MaxSize < 0)
689
 
    MaxSize = Cardinality(g) * ((Xpand) ? Limit : 1);
 
700
  if (MaxSize < 0) {
 
701
    if (!Multiple)
 
702
      MaxSize = Cardinality(g) * ((Xpand) ? Limit : 1);
 
703
    else
 
704
      MaxSize = 10;
 
705
 
 
706
  } // endif MaxSize
690
707
 
691
708
  return MaxSize;
692
709
  } // end of GetMaxSize
952
969
    Docp->CloseDoc(g, To_Xb);
953
970
    } // endif docp
954
971
 
 
972
  if (Multiple) {
 
973
    // Reset all constants to start a new parse
 
974
    Docp = NULL;
 
975
    Root = NULL;
 
976
    Curp = NULL;
 
977
    DBnode = NULL;
 
978
    TabNode = NULL;
 
979
    RowNode = NULL;
 
980
    ColNode = NULL;
 
981
    Nlist = NULL;
 
982
    Clist = NULL;
 
983
    To_Xb = NULL;
 
984
    Colp = NULL;
 
985
    Changed = false;
 
986
    Checked = false;
 
987
    NextSame = false;
 
988
    NewRow = false;
 
989
    Hasnod = false;
 
990
    Write = false;
 
991
//  Bufdone = false;
 
992
    Nodedone = false;
 
993
    Void = false;
 
994
    Nrow = -1;
 
995
    Irow = Header - 1;
 
996
    Nsub = 0;
 
997
    N = 0;
 
998
    } // endif Multiple
 
999
 
955
1000
  } // end of CloseDB
956
1001
 
957
1002
// ------------------------ XMLCOL functions ----------------------------