~drizzle-trunk/drizzle/development

1643.6.4 by Djellel E. Difallah
Added data dictionary view 'Query_cache_entries' to list current cached queries. Added a UDF print_query_cache_meta(key) to display a text representation of the metadata
1
/* 
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
2
 * Copyright (C) 2010 Djellel Eddine Difallah
1643.6.4 by Djellel E. Difallah
Added data dictionary view 'Query_cache_entries' to list current cached queries. Added a UDF print_query_cache_meta(key) to display a text representation of the metadata
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 *   * Redistributions of source code must retain the above copyright notice,
9
 *     this list of conditions and the following disclaimer.
10
 *   * Redistributions in binary form must reproduce the above copyright notice,
11
 *     this list of conditions and the following disclaimer in the documentation
12
 *     and/or other materials provided with the distribution.
1643.6.11 by Djellel E. Difallah
trunk merge
13
 *   * Neither the name of Djellel Eddine Difallah nor the names of its contributors
1643.6.4 by Djellel E. Difallah
Added data dictionary view 'Query_cache_entries' to list current cached queries. Added a UDF print_query_cache_meta(key) to display a text representation of the metadata
14
 *     may be used to endorse or promote products derived from this software
15
 *     without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27
 * THE POSSIBILITY OF SUCH DAMAGE.
28
 */
29
30
31
/**
32
 * @file
33
 *
34
 * Implements the DATA_DICTIONARY views which allows querying the
35
 * state of the Query Cache
36
 *
37
 * CREATE TABLE DATA_DICTIONARY.QUERY_CACHE_ENTRIES (
38
 *   KEY VARCHAR NOT NULL
39
 * , SCHEMA VARCHAR NOT NULL
40
 * , SQL VARCHAR NOT NULL
41
 * );
42
 */
43
44
#include "config.h"
45
46
#include "query_cache_service.h"
47
#include "data_dictionary_schema.h"
48
49
#include <fcntl.h>
50
#include <sys/stat.h>
51
52
using namespace std;
53
using namespace drizzled;
54
55
/*
56
 *
57
 * Query_Cache_Meta_ENTRIES view
58
 *
59
 */
60
61
QueryCacheTool::QueryCacheTool() :
62
  plugin::TableFunction("DATA_DICTIONARY", "QUERY_CACHE_ENTRIES")
63
{
64
  add_field("key");
65
  add_field("schema");
66
  add_field("sql");
67
}
68
69
QueryCacheTool::Generator::Generator(Field **arg) :
70
  plugin::TableFunction::Generator(arg)
71
{
72
  it= QueryCacheService::cache.begin();
73
  end= QueryCacheService::cache.end(); 
74
}
75
76
bool QueryCacheTool::Generator::populate()
77
{
78
  if (it == end)
79
  { 
80
    return false;
81
  } 
82
1643.6.14 by Djellel E. Difallah
Added the Table Based Invalidation and its test suite
83
  QueryCacheService::CacheEntry &entry= *it;
1643.6.4 by Djellel E. Difallah
Added data dictionary view 'Query_cache_entries' to list current cached queries. Added a UDF print_query_cache_meta(key) to display a text representation of the metadata
84
85
  push(entry.first);
86
  push(entry.second.schema());
87
  push(entry.second.sql());
88
89
  it++;
90
91
  return true;
92
}
1643.6.14 by Djellel E. Difallah
Added the Table Based Invalidation and its test suite
93
94
/*
95
 *
96
 * Query_Cache_Cached_Tables view
97
 *
98
 */
99
100
CachedTables::CachedTables() :
101
  plugin::TableFunction("DATA_DICTIONARY", "QUERY_CACHED_TABLES")
102
{
103
  add_field("Table");
104
  add_field("Cache_Keys");
105
}
106
107
CachedTables::Generator::Generator(Field **arg) :
108
  plugin::TableFunction::Generator(arg)
109
{
110
  it= QueryCacheService::cachedTables.begin();
111
  end= QueryCacheService::cachedTables.end(); 
112
}
113
114
bool CachedTables::Generator::populate()
115
{
116
  if (it == end)
117
  { 
118
    return false;
119
  } 
120
121
  QueryCacheService::CachedTablesEntry &entry= *it;
122
123
  push(entry.first);
124
  string list_keys;
125
  vector<string>::iterator tmp;
126
  for(tmp= entry.second.begin(); tmp != entry.second.end(); tmp++)
127
  {
128
    list_keys+= "::"+ *tmp;
129
  }
130
  push(list_keys);
131
  it++;
132
  return true;
133
}