User-defined functions (UDFs) হল সেই ফাংশনগুলি, যা ব্যবহারকারীরা নিজেদের প্রয়োজন অনুযায়ী মারিয়া ডিবি (MariaDB) ডেটাবেসে তৈরি করতে পারেন। এগুলি SQL কোয়েরি চলাকালীন বিশেষ কিছু কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়, যা স্ট্যান্ডার্ড SQL ফাংশন দ্বারা করা সম্ভব নয়। UDF ব্যবহার করে আপনি কাস্টম লগিক বা ক্য্যালকুলেশন যুক্ত করতে পারেন।
মারিয়া ডিবি তে UDF তৈরি করতে C বা C++ ভাষায় কোড লিখতে হয় এবং তারপর সেই কোডকে ডেটাবেসের সঙ্গে সংযুক্ত করতে হয়। মারিয়া ডিবি তে UDF তৈরি করার পদ্ধতি বেশ কিছু স্টেপ অনুসরণ করে করা হয়।
UDF তৈরি করার জন্য প্রস্তুতি
১. MariaDB UDF লাইব্রেরি ইনস্টল করা
প্রথমে, মারিয়া ডিবি তে UDF তৈরি করার জন্য সঠিক লাইব্রেরি (উদাহরণস্বরূপ libmariadb.so) ইনস্টল করা প্রয়োজন। এটি সাধারণত সার্ভার সিস্টেমে ডিফল্টভাবেই ইনস্টল থাকে, তবে যদি না থাকে, তাহলে আপনি সিস্টেমের প্যাকেজ ম্যানেজার ব্যবহার করে এটি ইনস্টল করতে পারেন।
UDF তৈরি করার ধাপ
২. C বা C++ কোড লেখা
একটি UDF তৈরি করতে হলে আপনাকে প্রথমে C বা C++ ভাষায় কোড লিখতে হবে। নিচে একটি উদাহরণ দেওয়া হল যেখানে একটি সিম্পল ফাংশন তৈরি করা হয়েছে যা দুটি পূর্ণসংখ্যার যোগফল বের করবে।
#include <mysql/mysql.h>
extern "C" {
my_bool add_numbers_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
void add_numbers_deinit(UDF_INIT *initid);
long long add_numbers(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
my_bool add_numbers_init(UDF_INIT *initid, UDF_ARGS *args, char *message) {
if (args->arg_count != 2) {
strcpy(message, "add_numbers() requires 2 arguments");
return 1;
}
args->arg_type[0] = INT_RESULT;
args->arg_type[1] = INT_RESULT;
return 0;
}
void add_numbers_deinit(UDF_INIT *initid) {}
long long add_numbers(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) {
long long num1 = *((long long*) args->args[0]);
long long num2 = *((long long*) args->args[1]);
return num1 + num2;
}
}
এই কোডটি দুটি পূর্ণসংখ্যার যোগফল বের করার একটি ফাংশন তৈরি করবে।
৩. UDF কম্পাইল করা
এবার C বা C++ কোডটি মারিয়া ডিবি সার্ভারের জন্য কম্পাইল করতে হবে। নিচের কমান্ডটি ব্যবহার করে আপনি কোডটি কম্পাইল করতে পারেন:
gcc -shared -fPIC -o add_numbers.so add_numbers.c -I/usr/include/mysql
এখানে, add_numbers.c হল কোডের সোর্স ফাইল এবং add_numbers.so হল কম্পাইল করা লাইব্রেরি ফাইল যা আপনি মারিয়া ডিবি তে ব্যবহার করবেন।
৪. UDF লাইব্রেরি লোড করা
ফাংশনটি তৈরি করার পর, আপনি এটি মারিয়া ডিবি তে লোড করতে পারবেন। এটি করার জন্য, নিচের SQL কোডটি ব্যবহার করুন:
CREATE FUNCTION add_numbers RETURNS INTEGER SONAME 'add_numbers.so';
এটি add_numbers.so লাইব্রেরি ফাইলটি মারিয়া ডিবি তে লোড করবে এবং add_numbers ফাংশনটি ডেটাবেসে ব্যবহারের জন্য প্রস্তুত হবে।
৫. UDF ব্যবহার করা
ফাংশনটি সফলভাবে লোড হওয়ার পরে, আপনি এটি SQL কোয়েরিতে ব্যবহার করতে পারবেন:
SELECT add_numbers(10, 20);
এই কোয়েরিটি add_numbers ফাংশনকে কল করবে এবং ১০ এবং ২০ এর যোগফল 30 রিটার্ন করবে।
৬. UDF আনইনস্টল করা
যদি আপনি আর UDF ফাংশনটি ব্যবহার করতে না চান, তাহলে আপনি এটি আনইনস্টল করতে পারেন:
DROP FUNCTION add_numbers;
এটি add_numbers ফাংশনটি ডেটাবেস থেকে মুছে ফেলবে।
UDF তৈরি করার সময় কিছু গুরুত্বপূর্ণ বিষয়
- লাইব্রেরি এবং ফাইল পারমিশন: UDF ফাংশন লোড করতে যে লাইব্রেরি ব্যবহার করা হচ্ছে, সেটির সঠিক পারমিশন থাকতে হবে। লাইব্রেরি ফাইলের পারমিশন সঠিক না হলে MariaDB লাইব্রেরিটি লোড করতে পারবে না।
- কম্পাইলিং: C বা C++ কোডটি সঠিকভাবে কম্পাইল করতে হবে যাতে এটি MariaDB এর সাথে সামঞ্জস্যপূর্ণ হয়।
- পারফরম্যান্স: UDF গুলি সাধারণত সিস্টেম লেভেল কোড হিসেবে কাজ করে, তাই এটি ডেটাবেসের পারফরম্যান্সে কিছুটা প্রভাব ফেলতে পারে। তাই শুধুমাত্র প্রয়োজনীয় ক্ষেত্রে ব্যবহার করা উচিত।
- ডিবাগিং: কোড লিখার সময় ডিবাগিং করতে ভুলবেন না, বিশেষ করে মেমরি বা টাইপ সম্পর্কিত ত্রুটি এড়াতে।
সারাংশ
মারিয়া ডিবি (MariaDB) তে User-defined Functions (UDFs) তৈরি করে আপনি ডেটাবেসে কাস্টম ফাংশনালিটি যোগ করতে পারেন। C বা C++ তে কোড লিখে, তা কম্পাইল করে এবং মারিয়া ডিবি তে লোড করে আপনি আপনার প্রয়োজনীয় ফাংশন তৈরি করতে পারেন। এটি ডেটাবেসের কার্যকারিতা বাড়ানোর একটি শক্তিশালী উপায়, তবে এটি কিছুটা জটিল এবং সাবধানতার সাথে ব্যবহার করা উচিত।
Read more