Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
f5855f2d
Commit
f5855f2d
authored
Apr 13, 2005
by
mskold@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for bug#9813: Test 'ndb_basic': Autoincrement fails in 64 bit
parent
f32fe9c1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
30 deletions
+48
-30
ndb/src/ndbapi/Ndb.cpp
ndb/src/ndbapi/Ndb.cpp
+25
-17
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+22
-12
sql/mysqld.cc
sql/mysqld.cc
+1
-1
No files found.
ndb/src/ndbapi/Ndb.cpp
View file @
f5855f2d
...
...
@@ -722,26 +722,28 @@ Remark: Returns a new TupleId to the application.
Uint64
Ndb
::
getAutoIncrementValue
(
const
char
*
aTableName
,
Uint32
cacheSize
)
{
D
EBUG_TRACE
(
"getAutoIncrementValue"
);
D
BUG_ENTER
(
"getAutoIncrementValue"
);
const
char
*
internalTableName
=
internalizeTableName
(
aTableName
);
Ndb_local_table_info
*
info
=
theDictionary
->
get_local_table_info
(
internalTableName
,
false
);
if
(
info
==
0
)
return
~
0
;
DBUG_RETURN
(
~
(
Uint64
)
0
)
;
const
NdbTableImpl
*
table
=
info
->
m_table_impl
;
Uint64
tupleId
=
getTupleIdFromNdb
(
table
->
m_tableId
,
cacheSize
);
return
tupleId
;
DBUG_PRINT
(
"info"
,
(
"value %u"
,
tupleId
));
DBUG_RETURN
(
tupleId
);
}
Uint64
Ndb
::
getAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
,
Uint32
cacheSize
)
{
D
EBUG_TRACE
(
"getAutoIncrementValue"
);
D
BUG_ENTER
(
"getAutoIncrementValue"
);
if
(
aTable
==
0
)
return
~
0
;
DBUG_RETURN
(
~
(
Uint64
)
0
)
;
const
NdbTableImpl
*
table
=
&
NdbTableImpl
::
getImpl
(
*
aTable
);
Uint64
tupleId
=
getTupleIdFromNdb
(
table
->
m_tableId
,
cacheSize
);
return
tupleId
;
DBUG_PRINT
(
"info"
,
(
"value %u"
,
tupleId
));
DBUG_RETURN
(
tupleId
);
}
Uint64
...
...
@@ -749,46 +751,52 @@ Ndb::getTupleIdFromNdb(const char* aTableName, Uint32 cacheSize)
{
const
NdbTableImpl
*
table
=
theDictionary
->
getTable
(
aTableName
);
if
(
table
==
0
)
return
~
0
;
return
~
(
Uint64
)
0
;
return
getTupleIdFromNdb
(
table
->
m_tableId
,
cacheSize
);
}
Uint64
Ndb
::
getTupleIdFromNdb
(
Uint32
aTableId
,
Uint32
cacheSize
)
{
DBUG_ENTER
(
"getTupleIdFromNdb"
);
if
(
theFirstTupleId
[
aTableId
]
!=
theLastTupleId
[
aTableId
]
)
{
theFirstTupleId
[
aTableId
]
++
;
return
theFirstTupleId
[
aTableId
];
DBUG_PRINT
(
"info"
,
(
"next cached value %u"
,
theFirstTupleId
[
aTableId
]));
DBUG_RETURN
(
theFirstTupleId
[
aTableId
]);
}
else
// theFirstTupleId == theLastTupleId
{
return
opTupleIdOnNdb
(
aTableId
,
cacheSize
,
0
);
DBUG_PRINT
(
"info"
,(
"reading %u values from database"
,
(
cacheSize
==
0
)
?
1
:
cacheSize
));
DBUG_RETURN
(
opTupleIdOnNdb
(
aTableId
,
(
cacheSize
==
0
)
?
1
:
cacheSize
,
0
));
}
}
Uint64
Ndb
::
readAutoIncrementValue
(
const
char
*
aTableName
)
{
D
EBUG_TRACE
(
"readtAutoIncrementValue"
);
D
BUG_ENTER
(
"readtAutoIncrementValue"
);
const
NdbTableImpl
*
table
=
theDictionary
->
getTable
(
aTableName
);
if
(
table
==
0
)
{
theError
=
theDictionary
->
getNdbError
();
return
~
0
;
DBUG_RETURN
(
~
(
Uint64
)
0
)
;
}
Uint64
tupleId
=
readTupleIdFromNdb
(
table
->
m_tableId
);
return
tupleId
;
DBUG_PRINT
(
"info"
,
(
"value %u"
,
tupleId
));
DBUG_RETURN
(
tupleId
);
}
Uint64
Ndb
::
readAutoIncrementValue
(
const
NdbDictionary
::
Table
*
aTable
)
{
D
EBUG_TRACE
(
"readtAutoIncrementValue"
);
D
BUG_ENTER
(
"readtAutoIncrementValue"
);
if
(
aTable
==
0
)
return
~
0
;
DBUG_RETURN
(
~
(
Uint64
)
0
)
;
const
NdbTableImpl
*
table
=
&
NdbTableImpl
::
getImpl
(
*
aTable
);
Uint64
tupleId
=
readTupleIdFromNdb
(
table
->
m_tableId
);
return
tupleId
;
DBUG_PRINT
(
"info"
,
(
"value %u"
,
tupleId
));
DBUG_RETURN
(
tupleId
);
}
Uint64
...
...
@@ -821,7 +829,7 @@ Ndb::setAutoIncrementValue(const NdbDictionary::Table * aTable, Uint64 val, bool
{
DEBUG_TRACE
(
"setAutoIncrementValue "
<<
val
);
if
(
aTable
==
0
)
return
~
0
;
return
~
(
Uint64
)
0
;
const
NdbTableImpl
*
table
=
&
NdbTableImpl
::
getImpl
(
*
aTable
);
return
setTupleIdInNdb
(
table
->
m_tableId
,
val
,
increase
);
}
...
...
@@ -971,7 +979,7 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
setDatabaseName
(
currentDb
.
c_str
());
setDatabaseSchemaName
(
currentSchema
.
c_str
());
return
~
0
;
return
~
(
Uint64
)
0
;
}
Uint32
...
...
sql/ha_ndbcluster.cc
View file @
f5855f2d
...
...
@@ -1854,7 +1854,7 @@ int ha_ndbcluster::write_row(byte *record)
m_rows_inserted
++
;
no_uncommitted_rows_update
(
1
);
m_bulk_insert_not_flushed
=
TRUE
;
if
((
m_rows_to_insert
==
1
)
||
if
((
m_rows_to_insert
==
(
ha_rows
)
1
)
||
((
m_rows_inserted
%
m_bulk_insert_rows
)
==
0
)
||
set_blob_value
)
{
...
...
@@ -2919,8 +2919,12 @@ void ha_ndbcluster::start_bulk_insert(ha_rows rows)
DBUG_ENTER
(
"start_bulk_insert"
);
DBUG_PRINT
(
"enter"
,
(
"rows: %d"
,
(
int
)
rows
));
m_rows_inserted
=
0
;
m_rows_to_insert
=
rows
;
m_rows_inserted
=
(
ha_rows
)
0
;
if
(
rows
==
(
ha_rows
)
0
)
/* We don't know how many will be inserted, guess */
m_rows_to_insert
=
m_autoincrement_prefetch
;
else
m_rows_to_insert
=
rows
;
/*
Calculate how many rows that should be inserted
...
...
@@ -2954,7 +2958,7 @@ int ha_ndbcluster::end_bulk_insert()
// Send rows to NDB
DBUG_PRINT
(
"info"
,
(
"Sending inserts to NDB, "
\
"rows_inserted:%d, bulk_insert_rows: %d"
,
m_rows_inserted
,
m_bulk_insert_rows
));
(
int
)
m_rows_inserted
,
(
int
)
m_bulk_insert_rows
));
m_bulk_insert_not_flushed
=
FALSE
;
if
(
execute_no_commit
(
this
,
trans
)
!=
0
)
{
no_uncommitted_rows_execute_failure
();
...
...
@@ -2962,8 +2966,8 @@ int ha_ndbcluster::end_bulk_insert()
}
}
m_rows_inserted
=
0
;
m_rows_to_insert
=
1
;
m_rows_inserted
=
(
ha_rows
)
0
;
m_rows_to_insert
=
(
ha_rows
)
1
;
DBUG_RETURN
(
error
);
}
...
...
@@ -3152,7 +3156,8 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
// store thread specific data first to set the right context
m_force_send
=
thd
->
variables
.
ndb_force_send
;
m_ha_not_exact_count
=
!
thd
->
variables
.
ndb_use_exact_count
;
m_autoincrement_prefetch
=
thd
->
variables
.
ndb_autoincrement_prefetch_sz
;
m_autoincrement_prefetch
=
(
ha_rows
)
thd
->
variables
.
ndb_autoincrement_prefetch_sz
;
if
(
!
thd
->
transaction
.
on
)
m_transaction_on
=
FALSE
;
else
...
...
@@ -3566,7 +3571,7 @@ static int create_ndb_column(NDBCOL &col,
static
void
ndb_set_fragmentation
(
NDBTAB
&
tab
,
TABLE
*
form
,
uint
pk_length
)
{
if
(
form
->
max_rows
==
0
)
/* default setting, don't set fragmentation */
if
(
form
->
max_rows
==
(
ha_rows
)
0
)
/* default setting, don't set fragmentation */
return
;
/**
* get the number of fragments right
...
...
@@ -3929,7 +3934,12 @@ longlong ha_ndbcluster::get_auto_increment()
DBUG_ENTER
(
"get_auto_increment"
);
DBUG_PRINT
(
"enter"
,
(
"m_tabname: %s"
,
m_tabname
));
Ndb
*
ndb
=
get_ndb
();
if
(
m_rows_inserted
>
m_rows_to_insert
)
/* We guessed too low */
m_rows_to_insert
+=
m_autoincrement_prefetch
;
int
cache_size
=
(
int
)
(
m_rows_to_insert
-
m_rows_inserted
<
m_autoincrement_prefetch
)
?
m_rows_to_insert
-
m_rows_inserted
:
(
m_rows_to_insert
>
m_autoincrement_prefetch
)
?
...
...
@@ -3964,9 +3974,9 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_primary_key_update
(
FALSE
),
m_retrieve_all_fields
(
FALSE
),
m_retrieve_primary_key
(
FALSE
),
m_rows_to_insert
(
1
),
m_rows_inserted
(
0
),
m_bulk_insert_rows
(
1024
),
m_rows_to_insert
(
(
ha_rows
)
1
),
m_rows_inserted
(
(
ha_rows
)
0
),
m_bulk_insert_rows
(
(
ha_rows
)
1024
),
m_bulk_insert_not_flushed
(
FALSE
),
m_ops_pending
(
0
),
m_skip_auto_increment
(
TRUE
),
...
...
@@ -3976,7 +3986,7 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_dupkey
((
uint
)
-
1
),
m_ha_not_exact_count
(
FALSE
),
m_force_send
(
TRUE
),
m_autoincrement_prefetch
(
32
),
m_autoincrement_prefetch
(
(
ha_rows
)
32
),
m_transaction_on
(
TRUE
),
m_use_local_query_cache
(
FALSE
)
{
...
...
sql/mysqld.cc
View file @
f5855f2d
...
...
@@ -4548,7 +4548,7 @@ Disable with --skip-ndbcluster (will save memory).",
"Specify number of autoincrement values that are prefetched."
,
(
gptr
*
)
&
global_system_variables
.
ndb_autoincrement_prefetch_sz
,
(
gptr
*
)
&
global_system_variables
.
ndb_autoincrement_prefetch_sz
,
0
,
GET_
INT
,
REQUIRED_ARG
,
32
,
1
,
256
,
0
,
0
,
0
},
0
,
GET_
ULONG
,
REQUIRED_ARG
,
32
,
1
,
256
,
0
,
0
,
0
},
{
"ndb-force-send"
,
OPT_NDB_FORCE_SEND
,
"Force send of buffers to ndb immediately without waiting for "
"other threads."
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment